diff options
author | Krutika Dhananjay <kdhananj@redhat.com> | 2015-08-31 12:43:36 +0530 |
---|---|---|
committer | Kaushal M <kaushal@redhat.com> | 2015-08-31 08:09:47 -0700 |
commit | 300a69669aa6e9ebb16e5fc8326ac57c3e2d8937 (patch) | |
tree | 94200d708a28cc44e839a5364389006665c97ce7 /xlators/features | |
parent | d90ed0b9b7160911c3fb8515f2947579d0fd197f (diff) |
features/shard: Fix unlink failure due to non-existent shard(s)v3.7.4
Backport of: http://review.gluster.org/#/c/12059/
Unlink of a sharded file with holes was leading to EINVAL errors
because it was being wound on non-existent shards (those blocks that
fall in the hole region). loc->inode was NULL in these cases and
dht_unlink used to fail the FOP with EINVAL for failure to fetch
cached subvol for the inode.
The fix involves winding unlink on only those shards whose corresponding
inodes exist in memory.
Change-Id: I1e5d492a2e60491601da23f64a5d0089e536b305
BUG: 1258353
Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com>
Reviewed-on: http://review.gluster.org/12061
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'xlators/features')
-rw-r--r-- | xlators/features/shard/src/shard.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/xlators/features/shard/src/shard.c b/xlators/features/shard/src/shard.c index 6fb57168371..8b784eca1a8 100644 --- a/xlators/features/shard/src/shard.c +++ b/xlators/features/shard/src/shard.c @@ -1789,13 +1789,12 @@ shard_unlink_shards_do (call_frame_t *frame, xlator_t *this, inode_t *inode) return 0; } + local->call_count = call_count = count; + cur_block = 1; SHARD_SET_ROOT_FS_ID (frame, local); while (cur_block <= last_block) { - /* The base file is unlinked in the end to mark the - * successful completion of the fop. - */ - if (cur_block == 0) { + if (!local->inode_list[cur_block]) { cur_block++; continue; } |