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 <hongchao.zhang@intel.com>
Reviewed-on: http://review.whamcloud.com/14566
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Reviewed-by: wangdi <di.wang@intel.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
- /* 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));
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);
mdd_write_unlock(env, mdd_obj);
if (rc == 0)
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);