d1681e
From bffd85fc848a02b69db27c8f4d9d0882e2859fc9 Mon Sep 17 00:00:00 2001
d1681e
From: moagrawa <moagrawa@redhat.com>
d1681e
Date: Wed, 6 Jun 2018 07:39:29 +0530
d1681e
Subject: [PATCH 297/305] dht: Delete MDS internal xattr from dict in
d1681e
 dht_getxattr_cbk
d1681e
d1681e
Problem: At the time of fetching xattr to heal xattr by afr
d1681e
         it is not able to fetch xattr because posix_getxattr
d1681e
         has a check to ignore if xattr name is MDS
d1681e
d1681e
Solution: To ignore same xattr update a check in dht_getxattr_cbk
d1681e
          instead of having a check in posix_getxattr
d1681e
d1681e
> BUG: 1584098
d1681e
> Change-Id: I86cd2b2ee08488cb6c12f407694219d57c5361dc
d1681e
> fixes: bz#1584098
d1681e
> cherry pick from commit 2c1131e5868e46cfc806fb3a1cb63a5e554b4d6c
d1681e
> (Upstream review link https://review.gluster.org/#/c/20102/)
d1681e
d1681e
BUG: 1582119
d1681e
Change-Id: I71894c0754a09994a3fe69915fb17b6adf2b86c5
d1681e
Signed-off-by: moagrawa <moagrawa@redhat.com>
d1681e
Reviewed-on: https://code.engineering.redhat.com/gerrit/140773
d1681e
Tested-by: RHGS Build Bot <nigelb@redhat.com>
d1681e
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
d1681e
---
d1681e
 xlators/cluster/dht/src/dht-common.c |  4 ++++
d1681e
 xlators/storage/posix/src/posix.c    | 31 -------------------------------
d1681e
 2 files changed, 4 insertions(+), 31 deletions(-)
d1681e
d1681e
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
d1681e
index 5f246b1..c6adce4 100644
d1681e
--- a/xlators/cluster/dht/src/dht-common.c
d1681e
+++ b/xlators/cluster/dht/src/dht-common.c
d1681e
@@ -4537,6 +4537,10 @@ dht_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
d1681e
                         dict_del (xattr, conf->xattr_name);
d1681e
                 }
d1681e
 
d1681e
+                if (dict_get (xattr,  conf->mds_xattr_key)) {
d1681e
+                        dict_del (xattr, conf->mds_xattr_key);
d1681e
+                }
d1681e
+
d1681e
                 if (frame->root->pid >= 0) {
d1681e
                         GF_REMOVE_INTERNAL_XATTR
d1681e
                                 ("trusted.glusterfs.quota*", xattr);
d1681e
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
d1681e
index 416d9e4..6aa64f9 100644
d1681e
--- a/xlators/storage/posix/src/posix.c
d1681e
+++ b/xlators/storage/posix/src/posix.c
d1681e
@@ -4626,26 +4626,6 @@ out:
d1681e
         return ret;
d1681e
 }
d1681e
 
d1681e
-gf_boolean_t
d1681e
-posix_is_mds_xattr (const char *name)
d1681e
-{
d1681e
-        regex_t regcmpl;
d1681e
-        char *key = {"trusted.glusterfs.*.mds$"};
d1681e
-        regmatch_t result[1] = {{0} };
d1681e
-        gf_boolean_t status = _gf_false;
d1681e
-
d1681e
-        if (regcomp (&regcmpl, key, REG_EXTENDED)) {
d1681e
-                goto out;
d1681e
-        }
d1681e
-        if (!regexec (&regcmpl, name, 1, result, 0)) {
d1681e
-                status = _gf_true;
d1681e
-                goto out;
d1681e
-        }
d1681e
-out:
d1681e
-        regfree(&regcmpl);
d1681e
-        return status;
d1681e
-}
d1681e
-
d1681e
 
d1681e
 /**
d1681e
  * posix_getxattr - this function returns a dictionary with all the
d1681e
@@ -4702,13 +4682,6 @@ posix_getxattr (call_frame_t *frame, xlator_t *this,
d1681e
                 goto out;
d1681e
         }
d1681e
 
d1681e
-        if (name && posix_is_mds_xattr (name)) {
d1681e
-                op_ret = -1;
d1681e
-                op_errno = ENOATTR;
d1681e
-                goto out;
d1681e
-        }
d1681e
-
d1681e
-
d1681e
         if (loc->inode && IA_ISDIR(loc->inode->ia_type) && name &&
d1681e
             ZR_FILE_CONTENT_REQUEST(name)) {
d1681e
                 ret = posix_get_file_contents (this, loc->gfid, &name[15],
d1681e
@@ -5078,10 +5051,6 @@ posix_getxattr (call_frame_t *frame, xlator_t *this,
d1681e
                         goto ignore;
d1681e
                 }
d1681e
 
d1681e
-                if (posix_is_mds_xattr (keybuffer)) {
d1681e
-                        goto ignore;
d1681e
-                }
d1681e
-
d1681e
                 memset (value_buf, '\0', sizeof(value_buf));
d1681e
                 have_val = _gf_false;
d1681e
                 size = sys_lgetxattr (real_path, keybuffer, value_buf,
d1681e
-- 
d1681e
1.8.3.1
d1681e