diff options
author | Ravishankar N <ravishankar@redhat.com> | 2017-08-18 18:05:54 +0530 |
---|---|---|
committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2017-08-31 09:40:58 +0000 |
commit | d594900dbca92c356152be65fce16f77c402117c (patch) | |
tree | b180273f93d922dd8233e64e82cd7e0aa0b3ba22 /xlators/cluster/afr/src/afr-common.c | |
parent | 24b95089a18a6a40e7703cb344e92025d67f3086 (diff) |
afr: check validity of afr_reply
...in various self-heal code paths.
Originally found by Pranith in __afr_selfheal_name_impunge ()
Also change __afr_selfheal_assign_gfid() to send lookup only on those
bricks that don't have a gfid matching that of the source.
Change-Id: I70a2ccd750a2af92c5fc36e0eefb2b6125404b4a
BUG: 1482923
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
Reviewed-on: https://review.gluster.org/18065
Smoke: Gluster Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators/cluster/afr/src/afr-common.c')
-rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index a255f9d14ad..c6a110b2288 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -1699,6 +1699,19 @@ afr_local_transaction_cleanup (afr_local_t *local, xlator_t *this) } +void +afr_reply_wipe (struct afr_reply *reply) +{ + if (reply->xdata) { + dict_unref (reply->xdata); + reply->xdata = NULL; + } + + if (reply->xattr) { + dict_unref (reply->xattr); + reply->xattr = NULL; + } +} void afr_replies_wipe (struct afr_reply *replies, int count) @@ -1706,15 +1719,7 @@ afr_replies_wipe (struct afr_reply *replies, int count) int i = 0; for (i = 0; i < count; i++) { - if (replies[i].xdata) { - dict_unref (replies[i].xdata); - replies[i].xdata = NULL; - } - - if (replies[i].xattr) { - dict_unref (replies[i].xattr); - replies[i].xattr = NULL; - } + afr_reply_wipe (&replies[i]); } } |