diff --git a/lustre/include/lustre/lustre_idl.h b/lustre/include/lustre/lustre_idl.h index 9eb187aa54ef4e9211b0c055f21e5c593a52d007..eb9cdca92ccd3ee646d6174f22cedf6db57c1446 100644 --- a/lustre/include/lustre/lustre_idl.h +++ b/lustre/include/lustre/lustre_idl.h @@ -875,7 +875,16 @@ struct lov_mds_md_v1 { /* LOV EA mds/wire data (little-endian) */ #define XATTR_NAME_ACL_ACCESS "system.posix_acl_access" #define XATTR_NAME_ACL_DEFAULT "system.posix_acl_default" +#define XATTR_USER_PREFIX "user." +#define XATTR_TRUSTED_PREFIX "trusted." +#define XATTR_SECURITY_PREFIX "security." +#define XATTR_LUSTRE_PREFIX "lustre." + #define XATTR_NAME_LOV "trusted.lov" +#define XATTR_NAME_LMA "trusted.lma" +#define XATTR_NAME_LMV "trusted.lmv" +#define XATTR_NAME_LINK "trusted.link" + struct lov_mds_md_v3 { /* LOV EA mds/wire data (little-endian) */ __u32 lmm_magic; /* magic number = LOV_MAGIC_V3 */ diff --git a/lustre/include/lustre_mds.h b/lustre/include/lustre_mds.h index 9bf9437932bcd6d27006b434b9898adf2b297de1..dac9f11a0dea8d5c1ca24e428d360d959ff19ee3 100644 --- a/lustre/include/lustre_mds.h +++ b/lustre/include/lustre_mds.h @@ -71,9 +71,6 @@ int mds_lov_prepare_objids(struct obd_device *obd, struct lov_mds_md *lmm); void mds_lov_update_objids(struct obd_device *obd, struct lov_mds_md *lmm); -#define MDS_LOV_MD_NAME "trusted.lov" -#define MDS_LMV_MD_NAME "trusted.lmv" -#define MDS_LINK_EA_NAME "trusted.link" #define MDD_OBD_NAME "mdd_obd" #define MDD_OBD_UUID "mdd_obd_uuid" #define MDD_OBD_TYPE "mds" diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c index d66a025d30090c7bc0e207ce06346ac2ba70975e..0957d09d195cff0f8a3945a7f5d5baf8836dd215 100644 --- a/lustre/llite/xattr.c +++ b/lustre/llite/xattr.c @@ -50,11 +50,6 @@ #include "llite_internal.h" -#define XATTR_USER_PREFIX "user." -#define XATTR_TRUSTED_PREFIX "trusted." -#define XATTR_SECURITY_PREFIX "security." -#define XATTR_LUSTRE_PREFIX "lustre." - #define XATTR_USER_T (1) #define XATTR_TRUSTED_T (2) #define XATTR_SECURITY_T (3) @@ -239,7 +234,8 @@ int ll_setxattr(struct dentry *dentry, const char *name, return rc; - } else if (strcmp(name, "trusted.lma") == 0) /* b17288: ignore common_ea */ + } else if (strcmp(name, XATTR_NAME_LMA) == 0 || + strcmp(name, XATTR_NAME_LINK) == 0) return 0; return ll_setxattr_common(inode, name, value, size, flags, diff --git a/lustre/mdd/mdd_dir.c b/lustre/mdd/mdd_dir.c index 9b54aba617dc431dca4fc03da0f0bec5ddfc6936..f00d30702bdefb1ab5ee1fa8f5dcbbf9118b1816 100644 --- a/lustre/mdd/mdd_dir.c +++ b/lustre/mdd/mdd_dir.c @@ -2200,18 +2200,18 @@ struct lu_buf *mdd_links_get(const struct lu_env *env, return ERR_PTR(-ENOMEM); capa = mdd_object_capa(env, mdd_obj); - rc = mdo_xattr_get(env, mdd_obj, buf, MDS_LINK_EA_NAME, capa); + rc = mdo_xattr_get(env, mdd_obj, buf, XATTR_NAME_LINK, capa); if (rc == -ERANGE) { /* Buf was too small, figure out what we need. */ buf->lb_buf = NULL; buf->lb_len = 0; - rc = mdo_xattr_get(env, mdd_obj, buf, MDS_LINK_EA_NAME, capa); + rc = mdo_xattr_get(env, mdd_obj, buf, XATTR_NAME_LINK, capa); if (rc < 0) return ERR_PTR(rc); buf = mdd_buf_alloc(env, rc); if (buf->lb_buf == NULL) return ERR_PTR(-ENOMEM); - rc = mdo_xattr_get(env, mdd_obj, buf, MDS_LINK_EA_NAME, capa); + rc = mdo_xattr_get(env, mdd_obj, buf, XATTR_NAME_LINK, capa); } if (rc < 0) return ERR_PTR(rc); @@ -2340,7 +2340,7 @@ static int mdd_links_add(const struct lu_env *env, leh = buf->lb_buf; rc = __mdd_xattr_set(env, mdd_obj, mdd_buf_get_const(env, buf->lb_buf, leh->leh_len), - MDS_LINK_EA_NAME, 0, handle); + XATTR_NAME_LINK, 0, handle); if (rc) CERROR("link_ea add failed %d "DFID"\n", rc, PFID(mdd_object_fid(mdd_obj))); @@ -2418,7 +2418,7 @@ static int mdd_links_rename(const struct lu_env *env, rc = __mdd_xattr_set(env, mdd_obj, mdd_buf_get_const(env, buf->lb_buf, leh->leh_len), - MDS_LINK_EA_NAME, 0, handle); + XATTR_NAME_LINK, 0, handle); out: if (rc) diff --git a/lustre/mdd/mdd_lov.c b/lustre/mdd/mdd_lov.c index 6d62c7eb25f5f98b9c8ee50543359855a646b4c6..197ffd63f253df05417bfa3a47ca13e1eb13adee 100644 --- a/lustre/mdd/mdd_lov.c +++ b/lustre/mdd/mdd_lov.c @@ -243,7 +243,7 @@ static int mdd_lov_set_stripe_md(const struct lu_env *env, RETURN(rc); obd_free_memmd(lov_exp, &lsm); - rc = mdd_xattr_set_txn(env, obj, buf, MDS_LOV_MD_NAME, 0, handle); + rc = mdd_xattr_set_txn(env, obj, buf, XATTR_NAME_LOV, 0, handle); CDEBUG(D_INFO, "set lov ea of "DFID" rc %d \n", PFID(mdo2fid(obj)), rc); RETURN(rc); @@ -270,7 +270,7 @@ static int mdd_lov_set_dir_md(const struct lu_env *env, lum->lmm_stripe_offset == (typeof(lum->lmm_stripe_offset))(-1) && lum->lmm_magic != LOV_USER_MAGIC_V3) { rc = mdd_xattr_set_txn(env, obj, &LU_BUF_NULL, - MDS_LOV_MD_NAME, 0, handle); + XATTR_NAME_LOV, 0, handle); if (rc == -ENODATA) rc = 0; CDEBUG(D_INFO, "delete lov ea of "DFID" rc %d \n", @@ -316,7 +316,7 @@ int mdd_lov_set_md(const struct lu_env *env, struct mdd_object *pobj, rc = mdd_lov_set_stripe_md(env, child, buf, handle); } else { rc = mdd_xattr_set_txn(env, child, buf, - MDS_LOV_MD_NAME, 0, handle); + XATTR_NAME_LOV, 0, handle); } } else if (S_ISDIR(mode)) { if (lmmp == NULL && lmm_size == 0) { @@ -327,11 +327,11 @@ int mdd_lov_set_md(const struct lu_env *env, struct mdd_object *pobj, /* Get parent dir stripe and set */ if (pobj != NULL) rc = mdd_get_md_locked(env, pobj, lmm, &size, - MDS_LOV_MD_NAME); + XATTR_NAME_LOV); if (rc > 0) { buf = mdd_buf_get(env, lmm, size); rc = mdd_xattr_set_txn(env, child, buf, - MDS_LOV_MD_NAME, 0, handle); + XATTR_NAME_LOV, 0, handle); if (rc) CERROR("error on copy stripe info: rc " "= %d\n", rc); @@ -441,7 +441,7 @@ int mdd_lov_create(const struct lu_env *env, struct mdd_device *mdd, rc = mdd_get_md_locked(env, parent, _lmm, &_lmm_size, - MDS_LOV_MD_NAME); + XATTR_NAME_LOV); if (rc > 0) rc = obd_iocontrol(OBD_IOC_LOV_SETSTRIPE, lov_exp, 0, &lsm, _lmm); @@ -617,7 +617,7 @@ int mdd_lov_destroy(const struct lu_env *env, struct mdd_device *mdd, /* get lov ea */ rc = mdd_get_md_locked(env, obj, ma->ma_lmm, &ma->ma_lmm_size, - MDS_LOV_MD_NAME); + XATTR_NAME_LOV); if (rc <= 0) { CWARN("Get lov ea failed for "DFID" rc = %d\n", diff --git a/lustre/mdd/mdd_object.c b/lustre/mdd/mdd_object.c index 4ada09927391ebc8b142ff7a6ee7c9365f89cc9e..1efe365ae3b3ba0587f14d75791b497a6d874b4e 100644 --- a/lustre/mdd/mdd_object.c +++ b/lustre/mdd/mdd_object.c @@ -605,7 +605,7 @@ static int __mdd_lmm_get(const struct lu_env *env, RETURN(0); rc = mdd_get_md(env, mdd_obj, ma->ma_lmm, &ma->ma_lmm_size, - MDS_LOV_MD_NAME); + XATTR_NAME_LOV); if (rc == 0 && (ma->ma_need & MA_LOV_DEF)) { rc = mdd_get_default_md(mdd_obj, ma->ma_lmm, @@ -642,7 +642,7 @@ static int __mdd_lmv_get(const struct lu_env *env, RETURN(0); rc = mdd_get_md(env, mdd_obj, ma->ma_lmv, &ma->ma_lmv_size, - MDS_LMV_MD_NAME); + XATTR_NAME_LMV); if (rc > 0) { ma->ma_valid |= MA_LMV; rc = 0; @@ -1217,7 +1217,7 @@ static int mdd_attr_set(const struct lu_env *env, struct md_object *obj, GOTO(cleanup, rc = -ENOMEM); rc = mdd_get_md_locked(env, mdd_obj, lmm, &lmm_size, - MDS_LOV_MD_NAME); + XATTR_NAME_LOV); if (rc < 0) GOTO(cleanup, rc); @@ -1604,7 +1604,7 @@ static int mdd_object_create(const struct lu_env *env, rc = __mdd_xattr_set(env, mdd_obj, mdd_buf_get_const(env, lmv, lmv_size), - MDS_LMV_MD_NAME, 0, handle); + XATTR_NAME_LMV, 0, handle); if (rc) GOTO(unlock, rc); diff --git a/lustre/mdt/mdt_xattr.c b/lustre/mdt/mdt_xattr.c index 5a93bfed02f5df2521865db0c1dc62795cebc044..561a3952207220b95ded64a50ba741f2f63a43b2 100644 --- a/lustre/mdt/mdt_xattr.c +++ b/lustre/mdt/mdt_xattr.c @@ -280,8 +280,6 @@ int mdt_reint_setxattr(struct mdt_thread_info *info, { struct ptlrpc_request *req = mdt_info_req(info); struct md_ucred *uc = mdt_ucred(info); - const char user_string[] = "user."; - const char trust_string[] = "trusted."; struct mdt_lock_handle *lh; struct req_capsule *pill = info->mti_pill; const struct lu_env *env = info->mti_env; @@ -330,13 +328,19 @@ int mdt_reint_setxattr(struct mdt_thread_info *info, if (!xattr_name) GOTO(out, rc = err_serious(-EFAULT)); - if (strncmp(xattr_name, trust_string, sizeof(trust_string) - 1) == 0) { - if (strcmp(xattr_name + 8, XATTR_NAME_LOV) == 0) + if (strncmp(xattr_name, XATTR_USER_PREFIX, + sizeof(XATTR_USER_PREFIX) - 1) == 0) { + 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); } if (!(req->rq_export->exp_connect_flags & OBD_CONNECT_XATTR) && - (strncmp(xattr_name, user_string, sizeof(user_string) - 1) == 0)) { + (strncmp(xattr_name, XATTR_USER_PREFIX, + sizeof(XATTR_USER_PREFIX) - 1) == 0)) { GOTO(out, rc = -EOPNOTSUPP); } diff --git a/lustre/osd/osd_handler.c b/lustre/osd/osd_handler.c index 0d4b6be5a6ce89b93fa29557f9663434c23ae953..55b97d74bf838a00b19ca87f2545a309a3df1e4c 100644 --- a/lustre/osd/osd_handler.c +++ b/lustre/osd/osd_handler.c @@ -85,7 +85,6 @@ /* llo_* api support */ #include <md_object.h> -static const char MDT_XATTR_NAME[] = "trusted.lma"; static const char dot[] = "."; static const char dotdot[] = ".."; static const char remote_obj_dir[] = "REM_OBJ_DIR"; @@ -1718,7 +1717,7 @@ static int osd_ea_fid_set(const struct lu_env *env, struct dt_object *dt, return __osd_xattr_set(env, dt, osd_buf_get(env, mdt_attrs, sizeof *mdt_attrs), - MDT_XATTR_NAME, LU_XATTR_CREATE); + XATTR_NAME_LMA, LU_XATTR_CREATE); } @@ -1760,7 +1759,7 @@ static int osd_ea_fid_get(const struct lu_env *env, struct dentry *dentry, LASSERT(inode->i_op != NULL && inode->i_op->getxattr != NULL); - rc = inode->i_op->getxattr(dentry, MDT_XATTR_NAME, (void *)mdt_attrs, + rc = inode->i_op->getxattr(dentry, XATTR_NAME_LMA, (void *)mdt_attrs, sizeof *mdt_attrs); if (rc > 0) {