diff options
Diffstat (limited to 'xlators/features/bit-rot/src/stub/bit-rot-stub.c')
| -rw-r--r-- | xlators/features/bit-rot/src/stub/bit-rot-stub.c | 22 | 
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 5b2d5d70698..1ec9d459845 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-stub.c +++ b/xlators/features/bit-rot/src/stub/bit-rot-stub.c @@ -1608,6 +1608,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; @@ -1671,6 +1682,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;  | 
