3604df
From b9cf6778da2d951e0a1ceb99a4503a7ad7d9b3c0 Mon Sep 17 00:00:00 2001
3604df
From: N Balachandran <nbalacha@redhat.com>
3604df
Date: Tue, 22 Nov 2016 09:35:44 +0530
3604df
Subject: [PATCH 182/206] cluster/dht Set layout after mkdir as root
3604df
3604df
DHT does not set the layout for newly created
3604df
directories as root. This causes EPERM failures
3604df
when a non-root user with insufficient permissions
3604df
creates directories.
3604df
3604df
credit: srangana@redhat.com for RCA
3604df
3604df
> Change-Id: Ia646e41665ce172c43c5f01d2707455e8eb374ed
3604df
> BUG: 1392772
3604df
> Signed-off-by: N Balachandran <nbalacha@redhat.com>
3604df
> Reviewed-on: http://review.gluster.org/15794
3604df
> Reviewed-by: Susant Palai <spalai@redhat.com>
3604df
> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
3604df
> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
3604df
> Smoke: Gluster Build System <jenkins@build.gluster.org>
3604df
> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
3604df
> Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
3604df
3604df
Change-Id: I6b2de392cc8f4e15f63cb738d8290b85d0c4403b
3604df
BUG: 1391808
3604df
Signed-off-by: N Balachandran <nbalacha@redhat.com>
3604df
Reviewed-on: https://code.engineering.redhat.com/gerrit/90813
3604df
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
3604df
---
3604df
 xlators/cluster/dht/src/dht-common.c | 3 +++
3604df
 1 file changed, 3 insertions(+)
3604df
3604df
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
3604df
index 1594f62..0001d73 100644
3604df
--- a/xlators/cluster/dht/src/dht-common.c
3604df
+++ b/xlators/cluster/dht/src/dht-common.c
3604df
@@ -6975,6 +6975,7 @@ dht_mkdir_selfheal_cbk (call_frame_t *frame, void *cookie,
3604df
         local = frame->local;
3604df
         layout = local->selfheal.layout;
3604df
 
3604df
+        FRAME_SU_UNDO (frame, dht_local_t);
3604df
         dht_set_fixed_dir_stat (&local->preparent);
3604df
         dht_set_fixed_dir_stat (&local->postparent);
3604df
 
3604df
@@ -7062,6 +7063,7 @@ unlock:
3604df
 
3604df
         this_call_cnt = dht_frame_return (frame);
3604df
         if (is_last_call (this_call_cnt)) {
3604df
+                FRAME_SU_DO (frame, dht_local_t);
3604df
                 dht_selfheal_new_directory (frame, dht_mkdir_selfheal_cbk,
3604df
                                             layout);
3604df
         }
3604df
@@ -7295,6 +7297,7 @@ dht_mkdir_hashed_cbk (call_frame_t *frame, void *cookie,
3604df
         if (gf_uuid_is_null (local->loc.gfid))
3604df
                 gf_uuid_copy (local->loc.gfid, stbuf->ia_gfid);
3604df
         if (local->call_cnt == 0) {
3604df
+                FRAME_SU_DO (frame, dht_local_t);
3604df
                 dht_selfheal_directory (frame, dht_mkdir_selfheal_cbk,
3604df
                                         &local->loc, layout);
3604df
         }
3604df
-- 
3604df
2.9.3
3604df