From 6be9476e790ceef71e874b2745a8280443d5c90b Mon Sep 17 00:00:00 2001 From: Lai Siyao Date: Mon, 21 Aug 2023 18:47:33 -0400 Subject: [PATCH] LU-16743 lod: create stripe with correct attr 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 Change-Id: I8385f36bd2eee0e55cbe6bd031b0e013cda40e06 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52052 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Alex Zhuravlev Reviewed-by: Oleg Drokin --- lustre/lod/lod_object.c | 4 ++-- lustre/osd-zfs/osd_object.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lustre/lod/lod_object.c b/lustre/lod/lod_object.c index feaa690..b508c25 100644 --- a/lustre/lod/lod_object.c +++ b/lustre/lod/lod_object.c @@ -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); diff --git a/lustre/osd-zfs/osd_object.c b/lustre/osd-zfs/osd_object.c index f0bd9e8..b66254b 100644 --- a/lustre/osd-zfs/osd_object.c +++ b/lustre/osd-zfs/osd_object.c @@ -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) { -- 1.8.3.1