summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRavishankar N <ravishankar@redhat.com>2021-03-23 13:15:33 +0530
committerGitHub <noreply@github.com>2021-03-23 13:15:33 +0530
commit9d3bc96ed5842b43689a1f989255fac4f019c88f (patch)
treed35dc9564f9f663e386592bb2dba757143ab4614
parent532e6a678c610dc8b20271b5597c3f5282353f7d (diff)
downloadglusterfs-9d3bc96ed5842b43689a1f989255fac4f019c88f.tar.gz
glusterfs-9d3bc96ed5842b43689a1f989255fac4f019c88f.tar.xz
glusterfs-9d3bc96ed5842b43689a1f989255fac4f019c88f.zip
afr: remove priv->root_inode (#2244) (#2279)
priv->root_inode seems to be a remenant of pump xlator and was getting populated in discover code path. thin-arbiter code used it to populate loc info but it seems that in case of some daemons like quotad, the discover path for root gfid is not hit, causing it to crash. Fix: root inode can be accessed via this->itable->root, so use that and remove priv->rot_inode instances from the afr code. Fixes: #2234 Change-Id: Iec59c157f963a4dc455652a5c85a797d00cba52a Signed-off-by: Ravishankar N <ravishankar@redhat.com>
-rw-r--r--xlators/cluster/afr/src/afr-common.c3
-rw-r--r--xlators/cluster/afr/src/afr-transaction.c2
-rw-r--r--xlators/cluster/afr/src/afr.c2
-rw-r--r--xlators/cluster/afr/src/afr.h2
4 files changed, 1 insertions, 8 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c
index 89ecc580e4..8a60d2e2ca 100644
--- a/xlators/cluster/afr/src/afr-common.c
+++ b/xlators/cluster/afr/src/afr-common.c
@@ -3881,9 +3881,6 @@ afr_discover(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)
}
if (__is_root_gfid(loc->inode->gfid)) {
- if (!priv->root_inode)
- priv->root_inode = inode_ref(loc->inode);
-
if (priv->choose_local && !priv->did_discovery) {
/* Logic to detect which subvolumes of AFR are
local, in order to prefer them for reads
diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c
index a51f79b1f4..c29083aeda 100644
--- a/xlators/cluster/afr/src/afr-transaction.c
+++ b/xlators/cluster/afr/src/afr-transaction.c
@@ -1034,7 +1034,7 @@ afr_fill_ta_loc(xlator_t *this, loc_t *loc, gf_boolean_t is_gfid_based_fop)
afr_private_t *priv = NULL;
priv = this->private;
- loc->parent = inode_ref(priv->root_inode);
+ loc->parent = inode_ref(this->itable->root);
gf_uuid_copy(loc->pargfid, loc->parent->gfid);
loc->name = priv->pending_key[THIN_ARBITER_BRICK_INDEX];
if (is_gfid_based_fop && gf_uuid_is_null(priv->ta_gfid)) {
diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c
index 44aa2aa40b..deecbe68a7 100644
--- a/xlators/cluster/afr/src/afr.c
+++ b/xlators/cluster/afr/src/afr.c
@@ -662,8 +662,6 @@ init(xlator_t *this)
goto out;
}
- priv->root_inode = NULL;
-
ret = 0;
out:
return ret;
diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h
index d62f9a9caf..6fb2ce0c88 100644
--- a/xlators/cluster/afr/src/afr.h
+++ b/xlators/cluster/afr/src/afr.h
@@ -177,8 +177,6 @@ typedef struct _afr_private {
xlator_t **children;
- inode_t *root_inode;
-
int favorite_child; /* subvolume to be preferred in resolving
split-brain cases */
/* For thin-arbiter. */