diff options
| author | Krutika Dhananjay <kdhananj@redhat.com> | 2016-05-17 15:37:18 +0530 |
|---|---|---|
| committer | Niels de Vos <ndevos@redhat.com> | 2017-03-10 17:47:05 -0500 |
| commit | 8462ab0fed6ff2f875909ba8fda146b72d535c2a (patch) | |
| tree | 6d0d30bf6d49969d2206695c41f10eae2e42023d /libglusterfs/src/common-utils.c | |
| parent | 4ffa06cc4ddd3e30c76ecbbb5c62e50a86dd1a85 (diff) | |
features/shard: Fix EIO error on add-brick
Backport of: https://review.gluster.org/14419
DHT seems to link inode during lookup even before initializing
inode ctx with layout information, which comes after
directory healing.
Consider two parallel writes. As part of the first write,
shard sends lookup on .shard which in its return path would
cause DHT to link .shard inode. Now at this point, when a
second write is wound, inode_find() of .shard succeeds and
as a result of this, shard goes to create the participant
shards by issuing MKNODs under .shard. Since the layout is
yet to be initialized, mknod fails in dht call path with EIO,
leading to VM pauses.
The fix involves shard maintaining a flag to denote whether
a fresh lookup on .shard completed one network trip. If it
didn't, all inode_find()s in fop path will be followed by a
lookup before proceeding with the next stage of the fop.
Big thanks to Raghavendra G and Pranith Kumar K for the RCA
and subsequent inputs and feedback on the patch.
Change-Id: I66a7adf177e338a7691f441f199dde7c2b90c292
BUG: 1387878
Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com>
Reviewed-on: https://review.gluster.org/16750
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
Diffstat (limited to 'libglusterfs/src/common-utils.c')
0 files changed, 0 insertions, 0 deletions
