diff options
author | Ravishankar N <ravishankar@redhat.com> | 2021-03-23 13:15:33 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-23 13:15:33 +0530 |
commit | 9d3bc96ed5842b43689a1f989255fac4f019c88f (patch) | |
tree | d35dc9564f9f663e386592bb2dba757143ab4614 | |
parent | 532e6a678c610dc8b20271b5597c3f5282353f7d (diff) | |
download | glusterfs-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.c | 3 | ||||
-rw-r--r-- | xlators/cluster/afr/src/afr-transaction.c | 2 | ||||
-rw-r--r-- | xlators/cluster/afr/src/afr.c | 2 | ||||
-rw-r--r-- | xlators/cluster/afr/src/afr.h | 2 |
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. */ |