From ce8821a05da59e00de43e7c2f504bdb3b9dab82c Mon Sep 17 00:00:00 2001 From: Lai Siyao Date: Wed, 18 Jan 2012 15:46:24 +0800 Subject: [PATCH 1/1] LU-998 acl: declare acl operation for setattr Setattr on ATTR_MODE may set acl if acl is enabled, and it should be declared in advance. Signed-off-by: Lai Siyao Change-Id: Id9c94c5498f8fee0a79986bb424444f658c98e60 Reviewed-on: http://review.whamcloud.com/1984 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Alex Zhuravlev Reviewed-by: Li Wei Reviewed-by: Oleg Drokin --- lustre/mdd/mdd_object.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lustre/mdd/mdd_object.c b/lustre/mdd/mdd_object.c index ace6de2..cf17146 100644 --- a/lustre/mdd/mdd_object.c +++ b/lustre/mdd/mdd_object.c @@ -1514,6 +1514,29 @@ static int mdd_declare_attr_set(const struct lu_env *env, return rc; } +#ifdef CONFIG_FS_POSIX_ACL + if (ma->ma_attr.la_valid & LA_MODE) { + mdd_read_lock(env, obj, MOR_TGT_CHILD); + rc = mdo_xattr_get(env, obj, buf, XATTR_NAME_ACL_ACCESS, + BYPASS_CAPA); + mdd_read_unlock(env, obj); + if (rc == -EOPNOTSUPP || rc == -ENODATA) + rc = 0; + else if (rc < 0) + return rc; + + if (rc != 0) { + buf->lb_buf = NULL; + buf->lb_len = rc; + rc = mdo_declare_xattr_set(env, obj, buf, + XATTR_NAME_ACL_ACCESS, 0, + handle); + if (rc) + return rc; + } + } +#endif + /* basically the log is the same as in unlink case */ if (lmm) { __u16 stripe; -- 1.8.3.1