Whamcloud - gitweb
Lproc-snmp code drop
[fs/lustre-release.git] / lustre / lib / mds_updates.c
index 00620a1..b436d05 100644 (file)
 #include <linux/string.h>
 #include <linux/stat.h>
 #include <linux/errno.h>
-#include <linux/locks.h>
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+#include <linux/locks.h>   // for wait_on_buffer
+#else 
+#include <linux/buffer_head.h>   // for wait_on_buffer
+#endif
 #include <linux/unistd.h>
 
 #include <asm/system.h>
@@ -59,8 +63,7 @@ void mds_pack_inode2body(struct mds_body *b, struct inode *inode)
         b->uid = HTON__u32(inode->i_uid);
         b->gid = HTON__u32(inode->i_gid);
         b->flags = HTON__u32(inode->i_flags);
-        //b->major = HTON__u32(inode->i_major);
-        //b->minor = HTON__u32(inode->i_minor);
+        b->rdev = HTON__u32(b->rdev);
         b->nlink = HTON__u32(inode->i_nlink);
         b->generation = HTON__u32(inode->i_generation);
 }
@@ -83,8 +86,8 @@ static void mds_pack_body(struct mds_body *b)
 
         mds_pack_fid(&b->fid1);
         mds_pack_fid(&b->fid2);
-        b->extra = HTON__u64(b->extra);
         b->size = HTON__u64(b->size);
+        b->ino = HTON__u32(b->ino);
         b->valid = HTON__u32(b->valid);
         b->mode = HTON__u32(b->mode);
         b->uid = HTON__u32(b->uid);
@@ -93,9 +96,7 @@ static void mds_pack_body(struct mds_body *b)
         b->ctime = HTON__u32(b->ctime);
         b->atime = HTON__u32(b->atime);
         b->flags = HTON__u32(b->flags);
-        b->major = HTON__u32(b->major);
-        b->minor = HTON__u32(b->minor);
-        b->ino = HTON__u32(b->ino);
+        b->rdev = HTON__u32(b->rdev);
         b->nlink = HTON__u32(b->nlink);
         b->generation = HTON__u32(b->generation);
 }
@@ -131,7 +132,7 @@ void mds_pack_rep_body(struct ptlrpc_request *req)
 
 /* packing of MDS records */
 void mds_create_pack(struct ptlrpc_request *req, int offset,
-                     struct inode *inode, __u32 mode, __u64 rdev, __u32 uid,
+                     struct inode *dir, __u32 mode, __u64 rdev, __u32 uid,
                      __u32 gid, __u64 time, const char *name, int namelen,
                      const char *tgt, int tgtlen)
 {
@@ -143,7 +144,7 @@ void mds_create_pack(struct ptlrpc_request *req, int offset,
         rec->cr_opcode = HTON__u32(REINT_CREATE);
         rec->cr_fsuid = HTON__u32(current->fsuid);
         rec->cr_fsgid = HTON__u32(current->fsgid);
-        ll_inode2fid(&rec->cr_fid, inode);
+        ll_inode2fid(&rec->cr_fid, dir);
         rec->cr_mode = HTON__u32(mode);
         rec->cr_rdev = HTON__u64(rdev);
         rec->cr_uid = HTON__u32(uid);
@@ -265,13 +266,13 @@ void mds_unpack_body(struct mds_body *b)
         if (b == NULL)
                 LBUG();
 
-        b->fsuid = NTOH__u32(b->fsuid);
-        b->fsgid = NTOH__u32(b->fsgid);
         mds_unpack_fid(&b->fid1);
         mds_unpack_fid(&b->fid2);
-        b->extra = NTOH__u64(b->extra);
         b->size = NTOH__u64(b->size);
         b->valid = NTOH__u32(b->valid);
+        b->fsuid = NTOH__u32(b->fsuid);
+        b->fsgid = NTOH__u32(b->fsgid);
+        b->ino = NTOH__u32(b->ino);
         b->mode = NTOH__u32(b->mode);
         b->uid = NTOH__u32(b->uid);
         b->gid = NTOH__u32(b->gid);
@@ -279,9 +280,7 @@ void mds_unpack_body(struct mds_body *b)
         b->ctime = NTOH__u32(b->ctime);
         b->atime = NTOH__u32(b->atime);
         b->flags = NTOH__u32(b->flags);
-        b->major = NTOH__u32(b->major);
-        b->minor = NTOH__u32(b->minor);
-        b->ino = NTOH__u32(b->ino);
+        b->rdev = NTOH__u32(b->rdev);
         b->nlink = NTOH__u32(b->nlink);
         b->generation = NTOH__u32(b->generation);
 }
@@ -325,7 +324,7 @@ static int mds_create_unpack(struct ptlrpc_request *req, int offset,
         struct mds_rec_create *rec = lustre_msg_buf(req->rq_reqmsg, offset);
         ENTRY;
 
-        if (req->rq_reqmsg->bufcount != offset + 3 ||
+        if (req->rq_reqmsg->bufcount < offset + 2 ||
             req->rq_reqmsg->buflens[offset] != sizeof(*rec))
                 RETURN(-EFAULT);
 
@@ -341,8 +340,13 @@ static int mds_create_unpack(struct ptlrpc_request *req, int offset,
         r->ur_name = lustre_msg_buf(req->rq_reqmsg, offset + 1);
         r->ur_namelen = req->rq_reqmsg->buflens[offset + 1];
 
-        r->ur_tgt = lustre_msg_buf(req->rq_reqmsg, offset + 2);
-        r->ur_tgtlen = req->rq_reqmsg->buflens[offset + 2];
+        if (req->rq_reqmsg->bufcount == offset + 3) { 
+                r->ur_tgt = lustre_msg_buf(req->rq_reqmsg, offset + 2);
+                r->ur_tgtlen = req->rq_reqmsg->buflens[offset + 2];
+        } else { 
+                r->ur_tgt = NULL;
+                r->ur_tgtlen = 0;
+        }
         RETURN(0);
 }
 
@@ -419,24 +423,24 @@ static update_unpacker mds_unpackers[REINT_MAX + 1] = {
         [REINT_LINK] mds_link_unpack,
         [REINT_UNLINK] mds_unlink_unpack,
         [REINT_RENAME] mds_rename_unpack,
-        [REINT_RECREATE] mds_create_unpack,
 };
 
 int mds_update_unpack(struct ptlrpc_request *req, int offset,
                       struct mds_update_record *rec)
 {
         __u32 *opcode = lustre_msg_buf(req->rq_reqmsg, offset);
-        int rc;
+        int rc, realop;
         ENTRY;
 
         if (!opcode || req->rq_reqmsg->buflens[offset] < sizeof(*opcode))
                 RETURN(-EFAULT);
 
-        rec->ur_opcode = NTOH__u32(*opcode);
+        realop = rec->ur_opcode = NTOH__u32(*opcode);
+        realop &= REINT_OPCODE_MASK;
 
-        if (rec->ur_opcode < 0 || rec->ur_opcode > REINT_MAX)
+        if (realop < 0 || realop > REINT_MAX)
                 RETURN(-EFAULT);
 
-        rc = mds_unpackers[rec->ur_opcode](req, offset, rec);
+        rc = mds_unpackers[realop](req, offset, rec);
         RETURN(rc);
 }