Whamcloud - gitweb
LU-16743 lod: create stripe with correct attr 52/52052/6
authorLai Siyao <lai.siyao@whamcloud.com>
Mon, 21 Aug 2023 22:47:33 +0000 (18:47 -0400)
committerOleg Drokin <green@whamcloud.com>
Wed, 13 Sep 2023 04:03:11 +0000 (04:03 +0000)
lod_xattr_set_lmv() create directory stripe with master object attr,
but it shouldn't change attr->la_valid, otherwise bogus data may be
set on stripe object.

Zfs osd_create() copies attr to object directly, clear la_flags if
LA_FLAGS is not set in la_valid.
_
Test-Parameters: trivial
Test-Parameters: mdscount=2 mdtcount=4 mdtfilesystemtype=zfs testlist=sanity
Test-Parameters: mdscount=2 mdtcount=4 mdtfilesystemtype=zfs testlist=sanity
Test-Parameters: mdscount=2 mdtcount=4 mdtfilesystemtype=zfs testlist=sanity
Test-Parameters: mdscount=2 mdtcount=4 mdtfilesystemtype=zfs testlist=sanity
Test-Parameters: mdscount=2 mdtcount=4 mdtfilesystemtype=zfs testlist=sanity
Signed-off-by: Lai Siyao <lai.siyao@whamcloud.com>
Change-Id: I8385f36bd2eee0e55cbe6bd031b0e013cda40e06
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52052
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/lod/lod_object.c
lustre/osd-zfs/osd_object.c

index feaa690..b508c25 100644 (file)
@@ -4270,8 +4270,8 @@ static int lod_xattr_set_lmv(const struct lu_env *env, struct dt_object *dt,
        if (rc != 0)
                RETURN(rc);
 
-       attr->la_valid = LA_ATIME | LA_MTIME | LA_CTIME | LA_FLAGS |
-                        LA_MODE | LA_UID | LA_GID | LA_TYPE | LA_PROJID;
+       attr->la_valid &= LA_ATIME | LA_MTIME | LA_CTIME | LA_FLAGS |
+                         LA_MODE | LA_UID | LA_GID | LA_TYPE | LA_PROJID;
        dof->dof_type = DFT_DIR;
 
        rc = lod_prep_lmv_md(env, dt, &lmv_buf);
index f0bd9e8..b66254b 100644 (file)
@@ -2003,6 +2003,8 @@ static int osd_create(const struct lu_env *env, struct dt_object *dt,
        obj->oo_attr.la_size = 0;
        obj->oo_attr.la_nlink = 0;
        obj->oo_attr.la_valid |= LA_SIZE | LA_NLINK | LA_TYPE;
+       if (!(obj->oo_attr.la_valid & LA_FLAGS))
+               obj->oo_attr.la_flags = 0;
 
 #ifdef ZFS_PROJINHERIT
        if (osd->od_projectused_dn) {