From a4921671d04d8a8658bbb1aff8ba022b99e6e1ba Mon Sep 17 00:00:00 2001
From: huanghua <huanghua>
Date: Thu, 11 Dec 2008 03:05:20 +0000
Subject: [PATCH] Branch HEAD b=17288

att=20766
i=adilger
i=rahul.deshmukh
i=nathan.rutman

ignore direct "trusted.{lma, link}" setting on client and server.
---
 lustre/include/lustre/lustre_idl.h |  9 +++++++++
 lustre/include/lustre_mds.h        |  3 ---
 lustre/llite/xattr.c               |  8 ++------
 lustre/mdd/mdd_dir.c               | 10 +++++-----
 lustre/mdd/mdd_lov.c               | 14 +++++++-------
 lustre/mdd/mdd_object.c            |  8 ++++----
 lustre/mdt/mdt_xattr.c             | 14 +++++++++-----
 lustre/osd/osd_handler.c           |  5 ++---
 8 files changed, 38 insertions(+), 33 deletions(-)

diff --git a/lustre/include/lustre/lustre_idl.h b/lustre/include/lustre/lustre_idl.h
index 9eb187aa54..eb9cdca92c 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 9bf9437932..dac9f11a0d 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 d66a025d30..0957d09d19 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 9b54aba617..f00d30702b 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 6d62c7eb25..197ffd63f2 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 4ada099273..1efe365ae3 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 5a93bfed02..561a395220 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 0d4b6be5a6..55b97d74bf 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) {
-- 
GitLab