Commit 3314727b authored by Lai Siyao's avatar Lai Siyao Committed by Oleg Drokin
Browse files

LU-13437 llite: pack parent FID in getattr

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: 5f2c44bf

Fixes: f9a2da63

 ("LU-13437 mdt: don't fetch LOOKUP lock for remot...")
Signed-off-by: default avatarLai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: default avatarNeil Brown <neilb@suse.de>
Reviewed-by: default avatarAndreas Dilger <adilger@whamcloud.com>
Reviewed-by: default avatarOleg Drokin <green@whamcloud.com>
Change-Id: I91bace23e67b548feb92fd885fb5e64e92c96408
Reviewed-on: https://review.whamcloud.com/39771

Tested-by: default avatarjenkins <devops@whamcloud.com>
Tested-by: default avatarMaloo <maloo@whamcloud.com>
parent daa91482
......@@ -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 | \
......
......@@ -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));
......
......@@ -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)
......
......@@ -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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment