From 0158031bc32d1719ec05d12d1ceb03e4ecb66a97 Mon Sep 17 00:00:00 2001 From: Hongchao Zhang Date: Mon, 4 May 2015 04:25:25 +0800 Subject: [PATCH] LU-4045 mdd: use same attr to declare setattr in mdd_attr_set, different lu_attr ("la" and "la_copy") is used for declaring "setattr" and the "setattr" itself, the "LA_MODE" could be added to "la_copy" by "mdd_fix_attr" in some case and cause the "setxattr" in "mdd_attr_set_internal" is processed without declaration. Change-Id: Ic4441e0c72e8d8209d8f5e60f71ab09dc7987163 Signed-off-by: Hongchao Zhang Reviewed-on: http://review.whamcloud.com/14566 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Lai Siyao Reviewed-by: wangdi Reviewed-by: Alex Zhuravlev Reviewed-by: Oleg Drokin --- lustre/mdd/mdd_object.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lustre/mdd/mdd_object.c b/lustre/mdd/mdd_object.c index b6c8126..a526436 100644 --- a/lustre/mdd/mdd_object.c +++ b/lustre/mdd/mdd_object.c @@ -835,15 +835,20 @@ int mdd_attr_set(const struct lu_env *env, struct md_object *obj, if (rc) RETURN(rc); - /* setattr on "close" only change atime, or do nothing */ - if (la->la_valid == LA_ATIME && la_copy->la_valid == 0) - RETURN(0); + /* no need to setattr anymore */ + if (la_copy->la_valid == 0) { + CDEBUG(D_INODE, "%s: no valid attribute on "DFID", previous" + "valid is "LPX64"\n", mdd2obd_dev(mdd)->obd_name, + PFID(mdo2fid(mdd_obj)), la->la_valid); + + RETURN(0); + } handle = mdd_trans_create(env, mdd); if (IS_ERR(handle)) RETURN(PTR_ERR(handle)); - rc = mdd_declare_attr_set(env, mdd, mdd_obj, la, handle); + rc = mdd_declare_attr_set(env, mdd, mdd_obj, la_copy, handle); if (rc) GOTO(stop, rc); @@ -866,7 +871,8 @@ int mdd_attr_set(const struct lu_env *env, struct md_object *obj, mdd_write_unlock(env, mdd_obj); if (rc == 0) - rc = mdd_attr_set_changelog(env, obj, handle, la->la_valid); + rc = mdd_attr_set_changelog(env, obj, handle, + la_copy->la_valid); GOTO(stop, rc); -- 1.8.3.1