|
|
d2787b |
From a6ba95b73469ad81d8c5a27293f8d09cc26928a3 Mon Sep 17 00:00:00 2001
|
|
|
d2787b |
From: Ravishankar N <ravishankar@redhat.com>
|
|
|
d2787b |
Date: Fri, 18 Dec 2020 16:28:29 +0530
|
|
|
d2787b |
Subject: [PATCH 606/610] dht: handle DHT_SUBVOL_STATUS_KEY in dht_pt_getxattr
|
|
|
d2787b |
(#1934)
|
|
|
d2787b |
|
|
|
d2787b |
In non distribute volumes (plain replicate, ec), DHT uses pass-through
|
|
|
d2787b |
FOPs (dht_pt_getxattr) instead of the usual FOPS (dht_getxattr). The
|
|
|
d2787b |
pass through FOP was not handling the DHT_SUBVOL_STATUS_KEY virtual
|
|
|
d2787b |
xattr because of which geo-rep session was going into a faulty state.
|
|
|
d2787b |
Fixing it now.
|
|
|
d2787b |
|
|
|
d2787b |
> updates: #1925
|
|
|
d2787b |
> Change-Id: I766b5b5c047c954a9957ab78aca680eedef1ff1f
|
|
|
d2787b |
> Signed-off-by: Ravishankar N <ravishankar@redhat.com>
|
|
|
d2787b |
|
|
|
d2787b |
Upstream patch: https://github.com/gluster/glusterfs/pull/1934
|
|
|
d2787b |
|
|
|
d2787b |
BUG: 2006205
|
|
|
d2787b |
Change-Id: I766b5b5c047c954a9957ab78aca680eedef1ff1f
|
|
|
d2787b |
Signed-off-by: Shwetha K Acharya <sacharya@redhat.com>
|
|
|
d2787b |
Reviewed-on: https://code.engineering.redhat.com/gerrit/c/rhs-glusterfs/+/280112
|
|
|
d2787b |
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
|
|
d2787b |
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
|
|
d2787b |
---
|
|
|
d2787b |
xlators/cluster/dht/src/dht-common.c | 24 ++++++++++++++++++++++++
|
|
|
d2787b |
1 file changed, 24 insertions(+)
|
|
|
d2787b |
|
|
|
d2787b |
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
|
|
|
d2787b |
index 5eaaa1e..c8980e5 100644
|
|
|
d2787b |
--- a/xlators/cluster/dht/src/dht-common.c
|
|
|
d2787b |
+++ b/xlators/cluster/dht/src/dht-common.c
|
|
|
d2787b |
@@ -11584,9 +11584,33 @@ int
|
|
|
d2787b |
dht_pt_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,
|
|
|
d2787b |
const char *key, dict_t *xdata)
|
|
|
d2787b |
{
|
|
|
d2787b |
+ int op_errno = -1;
|
|
|
d2787b |
+ dht_local_t *local = NULL;
|
|
|
d2787b |
+
|
|
|
d2787b |
+ VALIDATE_OR_GOTO(frame, err);
|
|
|
d2787b |
+ VALIDATE_OR_GOTO(this, err);
|
|
|
d2787b |
+ VALIDATE_OR_GOTO(loc, err);
|
|
|
d2787b |
+ VALIDATE_OR_GOTO(loc->inode, err);
|
|
|
d2787b |
+ VALIDATE_OR_GOTO(this->private, err);
|
|
|
d2787b |
+
|
|
|
d2787b |
+ local = dht_local_init(frame, loc, NULL, GF_FOP_GETXATTR);
|
|
|
d2787b |
+ if (!local) {
|
|
|
d2787b |
+ op_errno = ENOMEM;
|
|
|
d2787b |
+ goto err;
|
|
|
d2787b |
+ }
|
|
|
d2787b |
+
|
|
|
d2787b |
+ if (key &&
|
|
|
d2787b |
+ strncmp(key, DHT_SUBVOL_STATUS_KEY, SLEN(DHT_SUBVOL_STATUS_KEY)) == 0) {
|
|
|
d2787b |
+ dht_vgetxattr_subvol_status(frame, this, key);
|
|
|
d2787b |
+ return 0;
|
|
|
d2787b |
+ }
|
|
|
d2787b |
+
|
|
|
d2787b |
STACK_WIND(frame, dht_pt_getxattr_cbk, FIRST_CHILD(this),
|
|
|
d2787b |
FIRST_CHILD(this)->fops->getxattr, loc, key, xdata);
|
|
|
d2787b |
return 0;
|
|
|
d2787b |
+err:
|
|
|
d2787b |
+ DHT_STACK_UNWIND(getxattr, frame, -1, op_errno, NULL, NULL);
|
|
|
d2787b |
+ return 0;
|
|
|
d2787b |
}
|
|
|
d2787b |
|
|
|
d2787b |
static int
|
|
|
d2787b |
--
|
|
|
d2787b |
1.8.3.1
|
|
|
d2787b |
|