diff options
author | Ravishankar N <ravishankar@redhat.com> | 2021-03-17 20:41:23 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-17 20:41:23 +0530 |
commit | 41c3947e3a12b38c5fed7bbdcb75b0bdcab144ec (patch) | |
tree | d9d5f6b56e6eafe12145956df9071726da0b895a | |
parent | 2b3e3ef08d98271d21473a5bdc341e4f2367ee56 (diff) | |
download | glusterfs-41c3947e3a12b38c5fed7bbdcb75b0bdcab144ec.tar.gz glusterfs-41c3947e3a12b38c5fed7bbdcb75b0bdcab144ec.tar.xz glusterfs-41c3947e3a12b38c5fed7bbdcb75b0bdcab144ec.zip |
afr: remove priv->root_inode (#2244)
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 ad9b6f0937..7f8340ae22 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -3874,9 +3874,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 0cbaeb6ec6..8eccaf1711 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 c4ca1ac4b7..32abd0502e 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. */ |