From 9d3bc96ed5842b43689a1f989255fac4f019c88f Mon Sep 17 00:00:00 2001 From: Ravishankar N Date: Tue, 23 Mar 2021 13:15:33 +0530 Subject: 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 --- xlators/cluster/afr/src/afr-common.c | 3 --- xlators/cluster/afr/src/afr-transaction.c | 2 +- xlators/cluster/afr/src/afr.c | 2 -- xlators/cluster/afr/src/afr.h | 2 -- 4 files changed, 1 insertion(+), 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. */ -- cgit