summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorN Balachandran <nbalacha@redhat.com>2018-02-06 15:20:16 +0530
committerjiffin tony Thottan <jthottan@redhat.com>2018-02-08 04:30:08 +0000
commitb0544a8f7257660e9c9a24284f262a5a384ee6cd (patch)
tree55c412318b8619496876b68e7d459c9a4b576e3e
parent187e8e8d879675048b1b133e5eb8a06ad3cc6f2a (diff)
cluster/dht: Unlink linkto files as root
Non-privileged users cannot delete linkto files. However the failure to unlink a stale linkto causes DHT to fail the lookup with EIO and hence prevent access to the file. > Change-Id: Id295362d41e52263790694602f36f1219f0646a2 > BUG: 1542318 > Signed-off-by: N Balachandran <nbalacha@redhat.com> Change-Id: Id295362d41e52263790694602f36f1219f0646a2 BUG: 1543016 Signed-off-by: N Balachandran <nbalacha@redhat.com>
-rw-r--r--xlators/cluster/dht/src/dht-common.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
index d977c1f87a1..f7bc4675630 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -1402,6 +1402,8 @@ dht_lookup_unlink_of_false_linkto_cbk (call_frame_t *frame, void *cookie,
local = (dht_local_t*)frame->local;
path = local->loc.path;
+ FRAME_SU_UNDO (frame, dht_local_t);
+
gf_msg (this->name, GF_LOG_INFO, 0,
DHT_MSG_UNLINK_LOOKUP_INFO, "lookup_unlink returned with "
"op_ret -> %d and op-errno -> %d for %s", op_ret, op_errno,
@@ -1471,6 +1473,7 @@ dht_lookup_unlink_stale_linkto_cbk (call_frame_t *frame, void *cookie,
"op_errno %d for %s", op_ret, op_errno,
((path==NULL)?"null":path));
+ FRAME_SU_UNDO (frame, dht_local_t);
DHT_STACK_UNWIND (lookup, frame, -1, ENOENT, NULL, NULL, NULL,
NULL);
@@ -1627,15 +1630,15 @@ dht_lookup_everywhere_done (call_frame_t *frame, xlator_t *this)
DHT_STACK_UNWIND (lookup, frame, -1, ENOENT,
NULL, NULL, NULL, NULL);
} else {
- local->skip_unlink.handle_valid_link = _gf_false;
+ local->skip_unlink.handle_valid_link = _gf_false;
gf_msg_debug (this->name, 0,
"No Cached was found and "
"unlink on hashed was skipped"
" so performing now: %s",
local->loc.path);
-
- STACK_WIND (frame,
+ FRAME_SU_DO (frame, dht_local_t);
+ STACK_WIND (frame,
dht_lookup_unlink_stale_linkto_cbk,
hashed_subvol,
hashed_subvol->fops->unlink,
@@ -1760,6 +1763,7 @@ dht_lookup_everywhere_done (call_frame_t *frame, xlator_t *this)
NULL, NULL);
} else {
local->call_cnt = 1;
+ FRAME_SU_DO (frame, dht_local_t);
STACK_WIND (frame,
dht_lookup_unlink_of_false_linkto_cbk,
hashed_subvol,