summaryrefslogtreecommitdiffstats
path: root/xlators/features/shard/src/shard.h
diff options
context:
space:
mode:
authorKrutika Dhananjay <kdhananj@redhat.com>2015-08-19 16:54:42 +0530
committerPranith Kumar Karampuri <pkarampu@redhat.com>2015-08-31 02:31:10 -0700
commitf0afc2e7c7bee3043ac1e7d098bc44db60186856 (patch)
treeb3b63b9de35cd9f12f8cfead7c53a4a96ba21d75 /xlators/features/shard/src/shard.h
parent889f9511a46c5e02007f70f567d2e0eaa2c9f41a (diff)
features/shard: Fix permission issues
Backport of: http://review.gluster.org/11992 This patch does the following: * reverts commit b467af0e99b39ef708420d3f7f6696b0ca618512 * changes ownership on shards under /.shard to be root:root * makes readv, writev, [f]truncate, rename, and unlink fops to perform operations on files under /.shard with frame->root->{uid,gid} as 0. This would ensure that a [f]setattr on a sharded file does not need to be called on all the shards associated with it. Change-Id: I50d8533bd2b769a4dfe8cd1b49bdcfc117a7e660 BUG: 1253151 Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com> Reviewed-on: http://review.gluster.org/12052 Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com> Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators/features/shard/src/shard.h')
-rw-r--r--xlators/features/shard/src/shard.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/xlators/features/shard/src/shard.h b/xlators/features/shard/src/shard.h
index f480c2912b6..e859b96c4db 100644
--- a/xlators/features/shard/src/shard.h
+++ b/xlators/features/shard/src/shard.h
@@ -116,6 +116,23 @@
} \
} while (0)
+#define SHARD_SET_ROOT_FS_ID(frame, local) do { \
+ if (!local->is_set_fsid) { \
+ local->uid = frame->root->uid; \
+ local->gid = frame->root->gid; \
+ frame->root->uid = 0; \
+ frame->root->gid = 0; \
+ local->is_set_fsid = _gf_true; \
+ } \
+} while (0)
+
+#define SHARD_UNSET_ROOT_FS_ID(frame, local) do { \
+ if (local->is_set_fsid) { \
+ frame->root->uid = local->uid; \
+ frame->root->gid = local->gid; \
+ local->is_set_fsid = _gf_false; \
+ } \
+} while (0)
typedef struct shard_priv {
uint64_t block_size;
@@ -184,6 +201,7 @@ typedef struct shard_local {
struct iobref *iobref;
struct iobuf *iobuf;
gf_dirent_t entries_head;
+ gf_boolean_t is_set_fsid;
gf_boolean_t list_inited;
gf_boolean_t is_write_extending;
shard_post_fop_handler_t handler;