d1681e
From 0e9d29c1ae1ba6954299489012ba69466709af0f Mon Sep 17 00:00:00 2001
d1681e
From: Raghavendra G <rgowdapp@redhat.com>
d1681e
Date: Thu, 3 May 2018 09:34:39 +0530
d1681e
Subject: [PATCH 249/260] cluster/dht: unwind if dht_selfheal_dir_mkdir returns
d1681e
 an error
d1681e
d1681e
If dht_selfheal_dir_mkdir returns an error, cbk passed to
d1681e
dht_selfheal_directory is not invoked. So, Current codepath leaves an
d1681e
unwound frame resulting in a hung fop forever.
d1681e
d1681e
> Change-Id: I422308b8a34a074301ca46b029ffe676f5e0f66c
d1681e
> fixes: bz#1574305
d1681e
> Signed-off-by: Raghavendra G <rgowdapp@redhat.com>
d1681e
d1681e
upstream patch: https://review.gluster.org/19953/
d1681e
Signed-off-by: Raghavendra G <rgowdapp@redhat.com>
d1681e
d1681e
Change-Id: I3ea6510d936eca6198147704d93580bd733eaeea
d1681e
BUG: 1561999
d1681e
Reviewed-on: https://code.engineering.redhat.com/gerrit/137725
d1681e
Tested-by: RHGS Build Bot <nigelb@redhat.com>
d1681e
Reviewed-by: Nithya Balachandran <nbalacha@redhat.com>
d1681e
---
d1681e
 xlators/cluster/dht/src/dht-selfheal.c | 6 +++++-
d1681e
 1 file changed, 5 insertions(+), 1 deletion(-)
d1681e
d1681e
diff --git a/xlators/cluster/dht/src/dht-selfheal.c b/xlators/cluster/dht/src/dht-selfheal.c
d1681e
index 7b192d3..53c59a2 100644
d1681e
--- a/xlators/cluster/dht/src/dht-selfheal.c
d1681e
+++ b/xlators/cluster/dht/src/dht-selfheal.c
d1681e
@@ -2336,7 +2336,11 @@ dht_selfheal_directory (call_frame_t *frame, dht_selfheal_dir_cbk_t dir_cbk,
d1681e
                 local->heal_layout = _gf_false;
d1681e
         }
d1681e
 
d1681e
-        dht_selfheal_dir_mkdir (frame, loc, layout, 0);
d1681e
+        ret = dht_selfheal_dir_mkdir (frame, loc, layout, 0);
d1681e
+        if (ret < 0) {
d1681e
+                ret = 0;
d1681e
+                goto sorry_no_fix;
d1681e
+        }
d1681e
 
d1681e
         return 0;
d1681e
 
d1681e
-- 
d1681e
1.8.3.1
d1681e