summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorKotresh HR <khiremat@redhat.com>2015-12-30 15:25:30 +0530
committerVenky Shankar <vshankar@redhat.com>2016-01-07 08:23:43 -0800
commitb9d2a383a265f1552d6bad0a22c92f4e7204dd85 (patch)
treee7a5bb647d8b5d3b2b7603a22624592ac2f400e9 /xlators
parent33ca7a7384491bf78f1c905a9085c17415eb1d91 (diff)
features/bitrot: Fail node-uuid getxattr if file is marked bad
If xattr is node-uuid and the inode is marked bad, fail getxattr and fgetxattr with EIO. Returning EIO would result in AFR to choose correct node-uuid coresponding to the subvolume where the good copy of the file resides. Change-Id: I45a42ca38f8322d2b10f3c4c48dc504521162b42 BUG: 1294786 Signed-off-by: Kotresh HR <khiremat@redhat.com> Reviewed-on: http://review.gluster.org/13116 Tested-by: NetBSD Build System <jenkins@build.gluster.org> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Venky Shankar <vshankar@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r--xlators/features/bit-rot/src/stub/bit-rot-stub.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub.c b/xlators/features/bit-rot/src/stub/bit-rot-stub.c
index 42db6d0..94e6946 100644
--- a/xlators/features/bit-rot/src/stub/bit-rot-stub.c
+++ b/xlators/features/bit-rot/src/stub/bit-rot-stub.c
@@ -1605,6 +1605,17 @@ br_stub_getxattr (call_frame_t *frame, xlator_t *this,
goto wind;
}
+ /**
+ * If xattr is node-uuid and the inode is marked bad, return EIO.
+ * Returning EIO would result in AFR to choose correct node-uuid
+ * coresponding to the subvolume * where the good copy of the
+ * file resides.
+ */
+ if (IA_ISREG (loc->inode->ia_type) && XATTR_IS_NODE_UUID (name) &&
+ br_stub_check_bad_object (this, loc->inode, &op_ret, &op_errno)) {
+ goto unwind;
+ }
+
if (br_stub_is_internal_xattr (name))
goto unwind;
@@ -1668,6 +1679,17 @@ br_stub_fgetxattr (call_frame_t *frame, xlator_t *this,
goto wind;
}
+ /**
+ * If xattr is node-uuid and the inode is marked bad, return EIO.
+ * Returning EIO would result in AFR to choose correct node-uuid
+ * coresponding to the subvolume * where the good copy of the
+ * file resides.
+ */
+ if (IA_ISREG (fd->inode->ia_type) && XATTR_IS_NODE_UUID (name) &&
+ br_stub_check_bad_object (this, fd->inode, &op_ret, &op_errno)) {
+ goto unwind;
+ }
+
if (br_stub_is_internal_xattr (name))
goto unwind;