Whamcloud - gitweb
LU-13437 llite: pack parent FID in getattr 71/39771/2
authorLai Siyao <lai.siyao@whamcloud.com>
Mon, 6 Jul 2020 13:52:45 +0000 (21:52 +0800)
committerOleg Drokin <green@whamcloud.com>
Sat, 19 Sep 2020 18:13:58 +0000 (18:13 +0000)
Pack parent FID in getattr request if OBD_CONNECT2_GETATTR_PFID is
enabled, otherwise fill it with target FID for backward compatibility.

Lustre-change: https://review.whamcloud.com/39290
Lustre-commit: 5f2c44bf626b178503c1c4d2d85c40bae087ff4f

Fixes: f9a2da63 ("LU-13437 mdt: don't fetch LOOKUP lock for remot...")
Signed-off-by: Lai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Change-Id: I91bace23e67b548feb92fd885fb5e64e92c96408
Reviewed-on: https://review.whamcloud.com/39771
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
lustre/include/uapi/linux/lustre/lustre_idl.h
lustre/llite/file.c
lustre/llite/llite_lib.c
lustre/lmv/lmv_intent.c

index 2e79565..26fa74b 100644 (file)
@@ -893,7 +893,8 @@ struct ptlrpc_body_v2 {
                                OBD_CONNECT2_ARCHIVE_ID_ARRAY | \
                                OBD_CONNECT2_SELINUX_POLICY | \
                                OBD_CONNECT2_LSOM | \
-                               OBD_CONNECT2_ASYNC_DISCARD)
+                               OBD_CONNECT2_ASYNC_DISCARD | \
+                               OBD_CONNECT2_GETATTR_PFID)
 
 #define OST_CONNECT_SUPPORTED  (OBD_CONNECT_SRVLOCK | OBD_CONNECT_GRANT | \
                                OBD_CONNECT_REQPORTAL | OBD_CONNECT_VERSION | \
index 250d93e..b7f9546 100644 (file)
@@ -4346,6 +4346,7 @@ static int ll_inode_revalidate_fini(struct inode *inode, int rc)
 
 static int ll_inode_revalidate(struct dentry *dentry, enum ldlm_intent_flags op)
 {
+       struct inode *parent;
        struct inode *inode = dentry->d_inode;
        struct obd_export *exp = ll_i2mdexp(inode);
        struct lookup_intent oit = {
@@ -4359,9 +4360,14 @@ static int ll_inode_revalidate(struct dentry *dentry, enum ldlm_intent_flags op)
        CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p),name=%s\n",
               PFID(ll_inode2fid(inode)), inode, dentry->d_name.name);
 
+       if (exp_connect_flags2(exp) & OBD_CONNECT2_GETATTR_PFID)
+               parent = dentry->d_parent->d_inode;
+       else
+               parent = inode;
+
        /* Call getattr by fid, so do not provide name at all. */
-       op_data = ll_prep_md_op_data(NULL, dentry->d_parent->d_inode, inode,
-                                    NULL, 0, 0, LUSTRE_OPC_ANY, NULL);
+       op_data = ll_prep_md_op_data(NULL, parent, inode, NULL, 0, 0,
+                                    LUSTRE_OPC_ANY, NULL);
        if (IS_ERR(op_data))
                RETURN(PTR_ERR(op_data));
 
index ee6e001..d200d2a 100644 (file)
@@ -228,7 +228,8 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt,
                                   OBD_CONNECT2_SUM_STATFS |
                                   OBD_CONNECT2_ARCHIVE_ID_ARRAY |
                                   OBD_CONNECT2_LSOM |
-                                  OBD_CONNECT2_ASYNC_DISCARD;
+                                  OBD_CONNECT2_ASYNC_DISCARD |
+                                  OBD_CONNECT2_GETATTR_PFID;
 
 #ifdef HAVE_LRU_RESIZE_SUPPORT
         if (sbi->ll_flags & LL_SBI_LRU_RESIZE)
index f7ec215..ef780b4 100644 (file)
@@ -188,7 +188,10 @@ int lmv_revalidate_slaves(struct obd_export *exp,
                 * which is not needed here.
                 */
                memset(op_data, 0, sizeof(*op_data));
-               op_data->op_fid1 = *pfid;
+               if (exp_connect_flags2(exp) & OBD_CONNECT2_GETATTR_PFID)
+                       op_data->op_fid1 = *pfid;
+               else
+                       op_data->op_fid1 = fid;
                op_data->op_fid2 = fid;
 
                tgt = lmv_get_target(lmv, lsm->lsm_md_oinfo[i].lmo_mds, NULL);