From: Lai Siyao Date: Thu, 24 Sep 2020 16:05:15 +0000 (+0800) Subject: LU-10753 osd-zfs: initialize obj attr correctly X-Git-Tag: 2.13.57~134 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=cf395c2507e80717e7468456e9959d432b6accc8;p=fs%2Flustre-release.git LU-10753 osd-zfs: initialize obj attr correctly mdt_thread_info.mti_attr is used to initialize object attr in create, currently it's copied to object.oo_attr directly, but some fields in mti_attr may contain bogus data because it's not cleared in each use, though la_valid is correctly set, but la_flags is used without checking la_valid in __mdd_permission_internal(). Another minor fix in osd_create(): set size/nlink to zero since they are set in valid. Test-Parameters: testlist=sanity env=ONLY=300,ONLY_REPEAT=100 Signed-off-by: Lai Siyao Change-Id: I64816b66a0b3c7aa50e62680d5251141697a8e0f Reviewed-on: https://review.whamcloud.com/40062 Tested-by: jenkins Reviewed-by: Alex Zhuravlev Tested-by: Maloo Reviewed-by: Olaf Faaland-LLNL Reviewed-by: Mike Pershin Reviewed-by: Oleg Drokin --- diff --git a/lustre/mdd/mdd_permission.c b/lustre/mdd/mdd_permission.c index 0857889..148c120 100644 --- a/lustre/mdd/mdd_permission.c +++ b/lustre/mdd/mdd_permission.c @@ -272,7 +272,8 @@ int __mdd_permission_internal(const struct lu_env *env, struct mdd_object *obj, /* * Nobody gets write access to an immutable file. */ - if (mask & MAY_WRITE && la->la_flags & LUSTRE_IMMUTABLE_FL) + if ((mask & MAY_WRITE) && (la->la_valid & LA_FLAGS) && + (la->la_flags & LUSTRE_IMMUTABLE_FL)) RETURN(-EACCES); LASSERT(la != NULL); diff --git a/lustre/osd-zfs/osd_object.c b/lustre/osd-zfs/osd_object.c index 0812a34..7f38fa4 100644 --- a/lustre/osd-zfs/osd_object.c +++ b/lustre/osd-zfs/osd_object.c @@ -1954,6 +1954,8 @@ static int osd_create(const struct lu_env *env, struct dt_object *dt, /* we may fix some attributes, better do not change the source */ obj->oo_attr = *attr; + obj->oo_attr.la_size = 0; + obj->oo_attr.la_nlink = 0; obj->oo_attr.la_valid |= LA_SIZE | LA_NLINK | LA_TYPE; #ifdef ZFS_PROJINHERIT