X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmdt%2Fmdt_xattr.c;h=ae04cafd22eace26d09ba09ab66a79382ee84670;hb=e2b24fe6ebb1ffa9c08277f564b0d188cb681142;hp=561a3952207220b95ded64a50ba741f2f63a43b2;hpb=a4921671d04d8a8658bbb1aff8ba022b99e6e1ba;p=fs%2Flustre-release.git diff --git a/lustre/mdt/mdt_xattr.c b/lustre/mdt/mdt_xattr.c index 561a395..ae04caf 100644 --- a/lustre/mdt/mdt_xattr.c +++ b/lustre/mdt/mdt_xattr.c @@ -48,13 +48,7 @@ #endif #define DEBUG_SUBSYSTEM S_MDS -/* prerequisite for linux/xattr.h */ -#include -/* prerequisite for linux/xattr.h */ -#include -/* XATTR_{REPLACE,CREATE} */ -#include - +#include #include "mdt_internal.h" @@ -68,7 +62,7 @@ static int mdt_getxattr_pack_reply(struct mdt_thread_info * info) static const char user_string[] = "user."; int size, rc; ENTRY; - + if (OBD_FAIL_CHECK(OBD_FAIL_MDS_GETXATTR_PACK)) RETURN(-ENOMEM); @@ -81,7 +75,7 @@ static int mdt_getxattr_pack_reply(struct mdt_thread_info * info) if (!(req->rq_export->exp_connect_flags & OBD_CONNECT_XATTR) && !strncmp(xattr_name, user_string, sizeof(user_string) - 1)) RETURN(-EOPNOTSUPP); - + size = mo_xattr_get(info->mti_env, mdt_object_child(info->mti_object), &LU_BUF_NULL, xattr_name); @@ -330,18 +324,22 @@ int mdt_reint_setxattr(struct mdt_thread_info *info, if (strncmp(xattr_name, XATTR_USER_PREFIX, sizeof(XATTR_USER_PREFIX) - 1) == 0) { + if (!(req->rq_export->exp_connect_flags & OBD_CONNECT_XATTR)) + GOTO(out, rc = -EOPNOTSUPP); if (strcmp(xattr_name, XATTR_NAME_LOV) == 0) GOTO(out, rc = -EACCES); if (strcmp(xattr_name, XATTR_NAME_LMA) == 0) GOTO(out, rc = 0); if (strcmp(xattr_name, XATTR_NAME_LINK) == 0) GOTO(out, rc = 0); - } + } else if ((valid & OBD_MD_FLXATTR) && + (strncmp(xattr_name, XATTR_NAME_ACL_ACCESS, + sizeof(XATTR_NAME_ACL_ACCESS) - 1) == 0)) { + /* currently lustre limit acl access size */ + xattr_len = req_capsule_get_size(pill, &RMF_EADATA, RCL_CLIENT); - if (!(req->rq_export->exp_connect_flags & OBD_CONNECT_XATTR) && - (strncmp(xattr_name, XATTR_USER_PREFIX, - sizeof(XATTR_USER_PREFIX) - 1) == 0)) { - GOTO(out, rc = -EOPNOTSUPP); + if (xattr_len > LUSTRE_POSIX_ACL_MAX_SIZE) + GOTO(out, -ERANGE); } lockpart = MDS_INODELOCK_UPDATE; @@ -354,6 +352,11 @@ int mdt_reint_setxattr(struct mdt_thread_info *info, if (IS_ERR(obj)) GOTO(out, rc = PTR_ERR(obj)); + info->mti_mos[0] = obj; + rc = mdt_version_get_check(info, 0); + if (rc) + GOTO(out_unlock, rc); + if (unlikely(!(valid & OBD_MD_FLCTIME))) { CWARN("client miss to set OBD_MD_FLCTIME when " "setxattr: [object "DFID"] [valid %llu]\n",