Whamcloud - gitweb
Lproc-snmp code drop
[fs/lustre-release.git] / lustre / mdc / mdc_request.c
index 62d4610..4b5f6b2 100644 (file)
 #include <linux/lustre_dlm.h>
 #include <linux/init.h>
 #include <linux/obd_lov.h>
+#include <linux/lprocfs_status.h>
 
 #define REQUEST_MINOR 244
 
 extern int mds_queue_req(struct ptlrpc_request *);
+extern lprocfs_vars_t status_var_nm_1[];
+extern lprocfs_vars_t status_class_var[];
 
-int mdc_getstatus(struct lustre_handle *conn, struct ll_fid *rootfid,
-                  __u64 *last_committed, __u64 *last_xid,
-                  struct ptlrpc_request **request)
+/* should become mdc_getinfo() */
+int mdc_getstatus(struct lustre_handle *conn, struct ll_fid *rootfid)
 {
         struct ptlrpc_request *req;
         struct mds_body *body;
@@ -61,13 +63,11 @@ int mdc_getstatus(struct lustre_handle *conn, struct ll_fid *rootfid,
                 body = lustre_msg_buf(req->rq_repmsg, 0);
                 mds_unpack_body(body);
                 memcpy(rootfid, &body->fid1, sizeof(*rootfid));
-                *last_committed = req->rq_repmsg->last_committed;
-                *last_xid = req->rq_repmsg->last_xid;
 
-                CDEBUG(D_NET,"root ino=%ld, last_committed=%Lu, last_xid=%Ld\n",
-                       (unsigned long)rootfid->id,
-                       (unsigned long long)*last_committed,
-                       (unsigned long long)*last_xid);
+                CDEBUG(D_NET, "root ino="LPU64", last_committed="LPU64
+                       ", last_xid="LPU64"\n",
+                       rootfid->id, req->rq_repmsg->last_committed,
+                       req->rq_repmsg->last_xid);
         }
 
         EXIT;
@@ -157,7 +157,7 @@ int mdc_getattr(struct lustre_handle *conn,
 
 static void d_delete_aliases(struct inode *inode)
 {
-        struct dentry *dentry;
+        struct dentry *dentry = NULL;
        struct list_head *tmp;
         int dentry_count = 0;
         ENTRY;
@@ -284,7 +284,8 @@ static void fixup_req_for_recreate(struct ptlrpc_request *fixreq,
         if (fixreq->rq_reqmsg->opc == LDLM_ENQUEUE) {
                 lockreq = lustre_msg_buf(fixreq->rq_reqmsg, 0);
 
-                if (lockreq->lock_desc.l_resource.lr_type != LDLM_MDSINTENT) {
+                if (lockreq->lock_desc.l_resource.lr_type != LDLM_PLAIN &&
+                    !(lockreq->lock_flags & LDLM_FL_HAS_INTENT)) {
                         DEBUG_REQ(D_HA, fixreq, "non-intent lock, skipping");
                         return;
                 }
@@ -347,11 +348,13 @@ static void mdc_replay_create(struct ptlrpc_request *req)
         /* XXX cargo-culted right out of ll_iget */
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
         inode = iget4(saved->sb, body->fid1.id, create_replay_find_inode, req);
-#else
+#endif
+#if 0
         {
                 extern int ll_read_inode2(struct inode *inode, void *opaque);
                 inode = iget5_locked(saved->sb, body->fid1.id,
-                                     create_replay_find_inode, req);
+                                     create_replay_find_inode, 
+                                     ll_read_inode2, req);
 
                 if (!inode)
                         LBUG(); /* XXX ick */
@@ -406,7 +409,7 @@ int mdc_enqueue(struct lustre_handle *conn, int lock_type,
         struct obd_device *obddev = class_conn2obd(conn);
         __u64 res_id[RES_NAME_SIZE] = {dir->i_ino, (__u64)dir->i_generation};
         int size[6] = {sizeof(struct ldlm_request), sizeof(struct ldlm_intent)};
-        int rc, flags = 0;
+        int rc, flags = LDLM_FL_HAS_INTENT;
         int repsize[3] = {sizeof(struct ldlm_reply),
                           sizeof(struct mds_body),
                           obddev->u.cli.cl_max_mds_easize};
@@ -748,8 +751,7 @@ int mdc_readpage(struct lustre_handle *conn, obd_id ino, int type, __u64 offset,
         return rc;
 }
 
-int mdc_statfs(struct lustre_handle *conn, struct obd_statfs *osfs,
-               struct ptlrpc_request **request)
+static int mdc_statfs(struct lustre_handle *conn, struct obd_statfs *osfs)
 {
         struct ptlrpc_request *req;
         int rc, size = sizeof(*osfs);
@@ -758,7 +760,8 @@ int mdc_statfs(struct lustre_handle *conn, struct obd_statfs *osfs,
         req = ptlrpc_prep_req(class_conn2cliimp(conn), MDS_STATFS, 0, NULL,
                               NULL);
         if (!req)
-                GOTO(out, rc = -ENOMEM);
+                RETURN(-ENOMEM);
+
         req->rq_replen = lustre_msg_size(1, &size);
 
         rc = ptlrpc_queue_wait(req);
@@ -771,26 +774,52 @@ int mdc_statfs(struct lustre_handle *conn, struct obd_statfs *osfs,
 
         EXIT;
 out:
-        *request = req;
+        ptlrpc_req_finished(req);
 
         return rc;
 }
+int mdc_attach(struct obd_device *dev, 
+                   obd_count len, void *data)
+{
+        int rc;
+        rc = lprocfs_reg_obd(dev, (lprocfs_vars_t*)status_var_nm_1, (void*)dev);
+        return rc; 
+}
 
+int mdc_detach(struct obd_device *dev)
+{
+        int rc;
+        rc = lprocfs_dereg_obd(dev);
+        return rc;
+
+}
 struct obd_ops mdc_obd_ops = {
+        o_attach: mdc_attach,
+        o_detach: mdc_detach,
         o_setup:   client_obd_setup,
         o_cleanup: client_obd_cleanup,
         o_connect: client_obd_connect,
         o_disconnect: client_obd_disconnect,
+        o_statfs: mdc_statfs,
 };
 
 static int __init ptlrpc_request_init(void)
 {
-        return class_register_type(&mdc_obd_ops, LUSTRE_MDC_NAME);
+        int rc;
+        rc = class_register_type(&mdc_obd_ops, 
+                                 (lprocfs_vars_t*)status_class_var, 
+                                 LUSTRE_MDC_NAME);
+        if(rc)
+                RETURN(rc);
+        return 0;
+        
 }
 
 static void __exit ptlrpc_request_exit(void)
 {
+        
         class_unregister_type(LUSTRE_MDC_NAME);
+        
 }
 
 MODULE_AUTHOR("Cluster File Systems <info@clusterfs.com>");
@@ -802,7 +831,6 @@ EXPORT_SYMBOL(mdc_getlovinfo);
 EXPORT_SYMBOL(mdc_enqueue);
 EXPORT_SYMBOL(mdc_cancel_unused);
 EXPORT_SYMBOL(mdc_getattr);
-EXPORT_SYMBOL(mdc_statfs);
 EXPORT_SYMBOL(mdc_create);
 EXPORT_SYMBOL(mdc_unlink);
 EXPORT_SYMBOL(mdc_rename);