From 192902851d73ec246af92a2ff7be8f23b08c4343 Mon Sep 17 00:00:00 2001 From: Qian Yingjin Date: Fri, 23 Nov 2018 16:10:54 +0800 Subject: [PATCH] LU-11695 som: disabling xattr cache for LSOM on client To obtain uptodate LSOM data, currently a client needs to set llite.*.xattr_cache =0 to disable the xattr cache on client completely. This leads that other kinds of xattr can not be cached on the client too. This patch introduces a heavy-weight solution to disable caching only for LSOM xattr data ("trusted.som") on client. Signed-off-by: Qian Yingjin Change-Id: Iab5ef3030b05ac09184d01f2a3a8ed92ff1cf26b Reviewed-on: https://review.whamcloud.com/33711 Tested-by: jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Li Xi Reviewed-by: Oleg Drokin --- lustre/llite/xattr.c | 3 ++- lustre/llite/xattr_cache.c | 4 ++++ lustre/tests/sanity.sh | 5 ----- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c index 1651d6b..27157ba3 100644 --- a/lustre/llite/xattr.c +++ b/lustre/llite/xattr.c @@ -398,7 +398,8 @@ int ll_xattr_list(struct inode *inode, const char *name, int type, void *buffer, GOTO(out_xattr, rc = -EPERM); if (sbi->ll_xattr_cache_enabled && type != XATTR_ACL_ACCESS_T && - (type != XATTR_SECURITY_T || strcmp(name, "security.selinux"))) { + (type != XATTR_SECURITY_T || strcmp(name, "security.selinux")) && + (type != XATTR_TRUSTED_T || strcmp(name, XATTR_NAME_SOM))) { rc = ll_xattr_cache_get(inode, name, buffer, size, valid); if (rc == -EAGAIN) goto getxattr_nocache; diff --git a/lustre/llite/xattr_cache.c b/lustre/llite/xattr_cache.c index ce3e3a7..9de6b6d 100644 --- a/lustre/llite/xattr_cache.c +++ b/lustre/llite/xattr_cache.c @@ -509,6 +509,10 @@ static int ll_xattr_cache_refill(struct inode *inode) /* Filter out security.selinux, it is cached in slab */ CDEBUG(D_CACHE, "not caching security.selinux\n"); rc = 0; + } else if (!strcmp(xdata, XATTR_NAME_SOM)) { + /* Filter out trusted.som, it is not cached on client */ + CDEBUG(D_CACHE, "not caching trusted.som\n"); + rc = 0; } else { rc = ll_xattr_cache_add(&lli->lli_xattrs, xdata, xval, *xsizes); diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 40e3d82..19f2212 100755 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -27697,11 +27697,6 @@ test_807() { changelog_users $SINGLEMDS | grep -q $cl_user || error "User $cl_user not found in changelog_users" - local save="$TMP/$TESTSUITE-$TESTNAME.parameters" - save_lustre_params client "llite.*.xattr_cache" > $save - lctl set_param llite.*.xattr_cache=0 - stack_trap "restore_lustre_params < $save; rm -f $save" EXIT - rm -rf $DIR/$tdir || error "rm $tdir failed" mkdir_on_mdt0 $DIR/$tdir || error "mkdir $tdir failed" touch $DIR/$tdir/trunc || error "touch $tdir/trunc failed" -- 1.8.3.1