Whamcloud - gitweb
LU-4045 mdd: use same attr to declare setattr 66/14566/7
authorHongchao Zhang <hongchao.zhang@intel.com>
Sun, 3 May 2015 20:25:25 +0000 (04:25 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 16 Jul 2015 03:27:41 +0000 (03:27 +0000)
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>
lustre/mdd/mdd_object.c

index b6c8126..a526436 100644 (file)
@@ -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);