diff options
author | Krutika Dhananjay <kdhananj@redhat.com> | 2017-03-02 15:27:54 +0530 |
---|---|---|
committer | Niels de Vos <ndevos@redhat.com> | 2017-03-10 18:00:58 -0500 |
commit | 2b65e69bf7adcd6176c24ef1439bd06aa445deae (patch) | |
tree | b67e452f13f0542b081d3d72dad51fbcf729abed | |
parent | 8462ab0fed6ff2f875909ba8fda146b72d535c2a (diff) |
cluster/dht: Fix crash in "nuke-dir" feature
Backport of: https://review.gluster.org/16829
My patch at https://review.gluster.org/16419 is resulting
in core dumps everytime I run tests/features/nuke.t.
Turns out dht, upon successfully "nuking" a directory,
which was initiated through a setxattr, unwinds the operation
with rmdir fop signature, resulting in readdir-ahead casting
a struct iatt (preparent) to dict_t, leading to a crash.
Change-Id: Ib970b3198185a6c641092b00e115a672cb3f9111
BUG: 1428743
Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com>
Reviewed-on: https://review.gluster.org/16840
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index c3b1a541507..74a2aa78ca7 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -3968,6 +3968,15 @@ err: } int +dht_nuke_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iatt *preparent, + struct iatt *postparent, dict_t *xdata) +{ + STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, NULL); + return 0; +} + +int dht_nuke_dir (call_frame_t *frame, xlator_t *this, loc_t *loc, data_t *tmp) { if (!IA_ISDIR(loc->inode->ia_type)) { @@ -3998,7 +4007,7 @@ dht_nuke_dir (call_frame_t *frame, xlator_t *this, loc_t *loc, data_t *tmp) * obscure the fact that we came in via this path instead of a genuine * rmdir. That makes debugging just a tiny bit easier. */ - STACK_WIND (frame, default_rmdir_cbk, this, this->fops->rmdir, + STACK_WIND (frame, dht_nuke_dir_cbk, this, this->fops->rmdir, loc, 1, NULL); return 0; |