summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/dht/src/dht-common.c
diff options
context:
space:
mode:
authorN Balachandran <nbalacha@redhat.com>2017-08-08 22:33:24 +0530
committerRaghavendra G <rgowdapp@redhat.com>2017-08-09 02:44:41 +0000
commit747a08d34e2a1e94d7fce68a3577370288bb1955 (patch)
tree35e66a3f962730c521331337a150136d3a66114d /xlators/cluster/dht/src/dht-common.c
parentc13d69babc228a2932994962d6ea8afe2cdd620a (diff)
cluster/dht: EBADF handling for fremovexattr and fsetxattr
Add EBADF handling for dht_fremovexattr and dht_fsetxattr. Change-Id: Ide0d5812dae79655d2565157e5baabcd753b4309 BUG: 1476665 Signed-off-by: N Balachandran <nbalacha@redhat.com> Reviewed-on: https://review.gluster.org/17999 Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Diffstat (limited to 'xlators/cluster/dht/src/dht-common.c')
-rw-r--r--xlators/cluster/dht/src/dht-common.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
index d328b78cbe1..9643caa0e17 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -3815,6 +3815,14 @@ dht_file_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
local->op_errno = op_errno;
+ if ((local->fop == GF_FOP_FSETXATTR) &&
+ op_ret == -1 && (op_errno == EBADF) && !(local->fd_checked)) {
+ ret = dht_check_and_open_fd_on_subvol (this, frame);
+ if (ret)
+ goto out;
+ return 0;
+ }
+
if ((op_ret == -1) && !dht_inode_missing (op_errno)) {
gf_msg_debug (this->name, op_errno,
"subvolume %s returned -1.",
@@ -4388,6 +4396,14 @@ dht_file_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
local->op_errno = op_errno;
+ if ((local->fop == GF_FOP_FREMOVEXATTR) &&
+ (op_ret == -1) && (op_errno == EBADF) && !(local->fd_checked)) {
+ ret = dht_check_and_open_fd_on_subvol (this, frame);
+ if (ret)
+ goto out;
+ return 0;
+ }
+
if ((op_ret == -1) && !dht_inode_missing (op_errno)) {
gf_msg_debug (this->name, op_errno,
"subvolume %s returned -1",