Whamcloud - gitweb
b=3920
[fs/lustre-release.git] / lustre / mds / mds_lib.c
index a407176..ced2a70 100644 (file)
 #include <linux/lustre_lib.h>
 #include <linux/lustre_mds.h>
 
+void mds_pack_dentry2fid(struct ll_fid *fid, struct dentry *dentry)
+{
+        fid->id = dentry->d_inum;
+        fid->generation = dentry->d_generation;
+        fid->mds = dentry->d_mdsnum;
+}
+
+void mds_pack_dentry2body(struct mds_body *b, struct dentry *dentry)
+{
+        b->valid |= OBD_MD_FLID | OBD_MD_FLGENER;
+        b->ino = dentry->d_inum;
+        b->generation = dentry->d_generation;
+        b->mds = dentry->d_mdsnum;
+}
+
 void mds_pack_inode2fid(struct obd_device *obd, struct ll_fid *fid,
                                 struct inode *inode)
 {
@@ -83,7 +98,13 @@ void mds_pack_inode2body(struct obd_device *obd, struct mds_body *b,
         b->flags = inode->i_flags;
         b->rdev = inode->i_rdev;
         /* Return the correct link count for orphan inodes */
-        b->nlink = mds_inode_is_orphan(inode) ? 0 : inode->i_nlink;
+        if (mds_inode_is_orphan(inode)) {
+                b->nlink = 0;
+        } else if (S_ISDIR(inode->i_mode)) {
+                b->nlink = 1;
+        } else {
+                b->nlink = inode->i_nlink;
+        }
         b->generation = inode->i_generation;
         b->suppgid = -1;
         b->mds = obd->u.mds.mds_num;
@@ -102,11 +123,11 @@ static int mds_setattr_unpack(struct ptlrpc_request *req, int offset,
         if (rec == NULL)
                 RETURN (-EFAULT);
 
-        r->ur_fsuid = rec->sa_fsuid;
-        r->ur_fsgid = rec->sa_fsgid;
-        r->ur_cap = rec->sa_cap;
-        r->ur_suppgid1 = rec->sa_suppgid;
-        r->ur_suppgid2 = -1;
+        r->_ur_fsuid = rec->sa_fsuid;
+        r->_ur_fsgid = rec->sa_fsgid;
+        r->_ur_cap = rec->sa_cap;
+        r->_ur_suppgid1 = rec->sa_suppgid;
+        r->_ur_suppgid2 = -1;
         r->ur_fid1 = &rec->sa_fid;
         attr->ia_valid = rec->sa_valid;
         attr->ia_mode = rec->sa_mode;
@@ -149,17 +170,17 @@ static int mds_create_unpack(struct ptlrpc_request *req, int offset,
         if (rec == NULL)
                 RETURN (-EFAULT);
 
-        r->ur_fsuid = rec->cr_fsuid;
-        r->ur_fsgid = rec->cr_fsgid;
-        r->ur_cap = rec->cr_cap;
+        r->_ur_fsuid = rec->cr_fsuid;
+        r->_ur_fsgid = rec->cr_fsgid;
+        r->_ur_cap = rec->cr_cap;
         r->ur_fid1 = &rec->cr_fid;
         r->ur_fid2 = &rec->cr_replayfid;
         r->ur_mode = rec->cr_mode;
         r->ur_rdev = rec->cr_rdev;
         r->ur_time = rec->cr_time;
         r->ur_flags = rec->cr_flags;
-        r->ur_suppgid1 = rec->cr_suppgid;
-        r->ur_suppgid2 = -1;
+        r->_ur_suppgid1 = rec->cr_suppgid;
+        r->_ur_suppgid2 = -1;
 
         LASSERT_REQSWAB (req, offset + 1);
         r->ur_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
@@ -205,11 +226,11 @@ static int mds_link_unpack(struct ptlrpc_request *req, int offset,
         if (rec == NULL)
                 RETURN (-EFAULT);
 
-        r->ur_fsuid = rec->lk_fsuid;
-        r->ur_fsgid = rec->lk_fsgid;
-        r->ur_cap = rec->lk_cap;
-        r->ur_suppgid1 = rec->lk_suppgid1;
-        r->ur_suppgid2 = rec->lk_suppgid2;
+        r->_ur_fsuid = rec->lk_fsuid;
+        r->_ur_fsgid = rec->lk_fsgid;
+        r->_ur_cap = rec->lk_cap;
+        r->_ur_suppgid1 = rec->lk_suppgid1;
+        r->_ur_suppgid2 = rec->lk_suppgid2;
         r->ur_fid1 = &rec->lk_fid1;
         r->ur_fid2 = &rec->lk_fid2;
         r->ur_time = rec->lk_time;
@@ -233,12 +254,12 @@ static int mds_unlink_unpack(struct ptlrpc_request *req, int offset,
         if (rec == NULL)
                 RETURN(-EFAULT);
 
-        r->ur_fsuid = rec->ul_fsuid;
-        r->ur_fsgid = rec->ul_fsgid;
-        r->ur_cap = rec->ul_cap;
+        r->_ur_fsuid = rec->ul_fsuid;
+        r->_ur_fsgid = rec->ul_fsgid;
+        r->_ur_cap = rec->ul_cap;
         r->ur_mode = rec->ul_mode;
-        r->ur_suppgid1 = rec->ul_suppgid;
-        r->ur_suppgid2 = -1;
+        r->_ur_suppgid1 = rec->ul_suppgid;
+        r->_ur_suppgid2 = -1;
         r->ur_fid1 = &rec->ul_fid1;
         r->ur_fid2 = &rec->ul_fid2;
         r->ur_time = rec->ul_time;
@@ -262,11 +283,11 @@ static int mds_rename_unpack(struct ptlrpc_request *req, int offset,
         if (rec == NULL)
                 RETURN(-EFAULT);
 
-        r->ur_fsuid = rec->rn_fsuid;
-        r->ur_fsgid = rec->rn_fsgid;
-        r->ur_cap = rec->rn_cap;
-        r->ur_suppgid1 = rec->rn_suppgid1;
-        r->ur_suppgid2 = rec->rn_suppgid2;
+        r->_ur_fsuid = rec->rn_fsuid;
+        r->_ur_fsgid = rec->rn_fsgid;
+        r->_ur_cap = rec->rn_cap;
+        r->_ur_suppgid1 = rec->rn_suppgid1;
+        r->_ur_suppgid2 = rec->rn_suppgid2;
         r->ur_fid1 = &rec->rn_fid1;
         r->ur_fid2 = &rec->rn_fid2;
         r->ur_time = rec->rn_time;
@@ -296,17 +317,17 @@ static int mds_open_unpack(struct ptlrpc_request *req, int offset,
         if (rec == NULL)
                 RETURN (-EFAULT);
 
-        r->ur_fsuid = rec->cr_fsuid;
-        r->ur_fsgid = rec->cr_fsgid;
-        r->ur_cap = rec->cr_cap;
+        r->_ur_fsuid = rec->cr_fsuid;
+        r->_ur_fsgid = rec->cr_fsgid;
+        r->_ur_cap = rec->cr_cap;
         r->ur_fid1 = &rec->cr_fid;
         r->ur_fid2 = &rec->cr_replayfid;
         r->ur_mode = rec->cr_mode;
         r->ur_rdev = rec->cr_rdev;
         r->ur_time = rec->cr_time;
         r->ur_flags = rec->cr_flags;
-        r->ur_suppgid1 = rec->cr_suppgid;
-        r->ur_suppgid2 = -1;
+        r->_ur_suppgid1 = rec->cr_suppgid;
+        r->_ur_suppgid2 = -1;
 
         LASSERT_REQSWAB (req, offset + 1);
         r->ur_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);