From: Hongchao Zhang Date: Sun, 3 May 2015 20:25:25 +0000 (+0800) Subject: LU-4045 mdd: use same attr to declare setattr X-Git-Tag: 2.7.57~41 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=refs%2Fchanges%2F66%2F14566%2F7 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 --- 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);