From d594900dbca92c356152be65fce16f77c402117c Mon Sep 17 00:00:00 2001 From: Ravishankar N Date: Fri, 18 Aug 2017 18:05:54 +0530 Subject: 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 Signed-off-by: Ravishankar N Reviewed-on: https://review.gluster.org/18065 Smoke: Gluster Build System CentOS-regression: Gluster Build System --- xlators/cluster/afr/src/afr-common.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'xlators/cluster/afr/src/afr-common.c') 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]); } } -- cgit