summaryrefslogtreecommitdiffstats
path: root/xlators/protocol/client/src/client-rpc-fops.c
diff options
context:
space:
mode:
authorRavishankar N <ravishankar@redhat.com>2015-09-16 16:35:19 +0530
committerPranith Kumar Karampuri <pkarampu@redhat.com>2015-10-13 04:26:16 -0700
commit79c5a715f9bab49f48876ab4f4bc79d211c0d7f1 (patch)
tree624544c545fd845ab7702da8299eace5694e1e98 /xlators/protocol/client/src/client-rpc-fops.c
parent0ef62933649392051e73fe01c028e41baddec489 (diff)
protocol/client: give preference to loc->gfid over inode->gfid
There are xlators which perform fops even before inode gets linked. Because of this loc.gfid is preferred at the time of inodelk/entrylk but by the time unlock can happen, inode could be linked with a different gfid than the one in loc.gfid (because of the way dht was giving preference) Due to this unlock goes on a different inode than the one we sent inodelk on, which leads to hang. Credits to Pranith for the fix. Change-Id: I7d162d44852ba876f35aa1bb83e4afdb184d85b9 BUG: 1266834 Signed-off-by: Ravishankar N <ravishankar@redhat.com> Reviewed-on: http://review.gluster.org/12233 Tested-by: NetBSD Build System <jenkins@build.gluster.org> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Diffstat (limited to 'xlators/protocol/client/src/client-rpc-fops.c')
-rw-r--r--xlators/protocol/client/src/client-rpc-fops.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/xlators/protocol/client/src/client-rpc-fops.c b/xlators/protocol/client/src/client-rpc-fops.c
index 15ffeb9aade..0d80443c93a 100644
--- a/xlators/protocol/client/src/client-rpc-fops.c
+++ b/xlators/protocol/client/src/client-rpc-fops.c
@@ -5536,10 +5536,10 @@ client3_3_inodelk (call_frame_t *frame, xlator_t *this,
if (!(args->loc && args->loc->inode))
goto unwind;
- if (!gf_uuid_is_null (args->loc->inode->gfid))
- memcpy (req.gfid, args->loc->inode->gfid, 16);
+ if (!gf_uuid_is_null (args->loc->gfid))
+ memcpy (req.gfid, args->loc->gfid, 16);
else
- memcpy (req.gfid, args->loc->gfid, 16);
+ memcpy (req.gfid, args->loc->inode->gfid, 16);
GF_ASSERT_AND_GOTO_WITH_ERROR (this->name,
!gf_uuid_is_null (*((uuid_t*)req.gfid)),
@@ -5699,10 +5699,10 @@ client3_3_entrylk (call_frame_t *frame, xlator_t *this,
if (!(args->loc && args->loc->inode))
goto unwind;
- if (!gf_uuid_is_null (args->loc->inode->gfid))
- memcpy (req.gfid, args->loc->inode->gfid, 16);
+ if (!gf_uuid_is_null (args->loc->gfid))
+ memcpy (req.gfid, args->loc->gfid, 16);
else
- memcpy (req.gfid, args->loc->gfid, 16);
+ memcpy (req.gfid, args->loc->inode->gfid, 16);
GF_ASSERT_AND_GOTO_WITH_ERROR (this->name,
!gf_uuid_is_null (*((uuid_t*)req.gfid)),