From cf395c2507e80717e7468456e9959d432b6accc8 Mon Sep 17 00:00:00 2001 From: Lai Siyao Date: Fri, 25 Sep 2020 00:05:15 +0800 Subject: [PATCH] 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 --- lustre/mdd/mdd_permission.c | 3 ++- lustre/osd-zfs/osd_object.c | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) 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 -- 1.8.3.1