diff options
authorshishir gowda <>2013-12-10 15:02:49 +0530
committerAnand Avati <>2014-03-11 09:31:57 -0700
commit010a9a7867c7135dfedf52e5d2b34122a9cb1984 (patch)
parente8fca12ee9cc51ac8a4265454753a3c27dae93f8 (diff)
dht: dht_lookup_dir_cbk should set op_errno as local->op_errnov3.4.3beta1
Two glusterfs clients return inconsistent errnos when the bricks of the volume were down. Consider two gluster mounts. Mount 1 was done when the bricks were online. Mount 2 was done after the bricks were killed, (using the 'glusterfs' command instead of the mount script). For any request, mount 1 will return ENOTCONN, where as mount 2 will return ENOENT. This happens because for the 2nd mount, a fuse would send a lookup on '/' for any request, as it hadn't been done yet. The client xlator returns ENOTCONN, but the dht_lookup_dir_cbk changed this to ENOENT unconditionally when aggregating. So, fuse returned ENOENT, even though the errno should have been ENOTCONN. backporting BUG: 1019095 Change-Id: Iaa40dffefddfcaf1ab7736f5423d7f9d2ece1363 Original-author: Kaushal M <> Signed-off-by: shishir gowda <> Reviewed-on: Tested-by: Gluster Build System <> Reviewed-by: Harshavardhana <> Reviewed-by: Anand Avati <>
1 files changed, 1 insertions, 1 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
index 02714def3..29bfd2160 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -430,7 +430,7 @@ dht_lookup_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
op_ret, op_errno, xattr);
if (op_ret == -1) {
- local->op_errno = ENOENT;
+ local->op_errno = op_errno;
gf_log (this->name, GF_LOG_DEBUG,
"lookup of %s on %s returned error (%s)",
local->loc.path, prev->this->name,