summaryrefslogtreecommitdiffstats
path: root/xlators/features
diff options
context:
space:
mode:
authorRaghavendra Bhat <raghavendra@redhat.com>2018-05-04 12:25:48 -0400
committerAmar Tumballi <amarts@redhat.com>2018-05-18 04:19:32 +0000
commitc2cf3f686f3ea0efd936d2eafc404fc9d2e0acc7 (patch)
tree05cf07ba57fa8510d698e6f9c049146aa98b5c3e /xlators/features
parent7588be808db3fcfda337971990f02d2ebccba3d7 (diff)
make posix return errors when gfid2path key is absent
Change-Id: I3a8d452d00560dac5e0b7ff0b1835d1f20a59f91 updates: bz#1570962 Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Diffstat (limited to 'xlators/features')
-rw-r--r--xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c38
1 files changed, 15 insertions, 23 deletions
diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c b/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c
index 24aa9aa5ff4..fff7a7eedf2 100644
--- a/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c
+++ b/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c
@@ -722,35 +722,21 @@ br_stub_get_path_of_gfid (xlator_t *this, inode_t *parent, inode_t *inode,
GF_VALIDATE_OR_GOTO (this->name, parent, out);
GF_VALIDATE_OR_GOTO (this->name, path, out);
- /* No need to validate the @inode for hard resolution. Because inode
- * can be NULL and if it is NULL, then syncop_gfid_to_path_hard will
- * allocate a new inode and proceed. So no need to bother about
+ /* Above, No need to validate the @inode for hard resolution. Because
+ * inode can be NULL and if it is NULL, then syncop_gfid_to_path_hard
+ * will allocate a new inode and proceed. So no need to bother about
* @inode. Because we need it only to send a syncop_getxattr call
* from inside syncop_gfid_to_path_hard. And getxattr fetches the
* path from the backend.
*/
+
ret = syncop_gfid_to_path_hard (parent->table, FIRST_CHILD (this), gfid,
inode, path, _gf_true);
-
- /*
- * This is to handle those corrupted files which does not contain
- * the gfid2path xattr in the backend (because they were created
- * when the option was OFF OR it was upgraded from a version before
- * gfid2path was brought in.
- * Ideally posix should be returning ret < 0 i.e. error if the
- * gfid2path xattr is not present. But for some reason it is
- * returning success and path as "". THis is causing problems.
- * For now handling it by adding extra checks. But the better way
- * is to make posix return error if gfid2path xattr is absent.
- * When that is done remove below if block and also this entire
- * comment.
- */
- if (ret >= 0 && !strlen (*path)) {
+ if (ret < 0)
gf_msg (this->name, GF_LOG_WARNING, 0, BRS_MSG_PATH_GET_FAILED,
- "path for the object %s is %s. Going for in memory path",
- uuid_utoa_r (gfid, gfid_str), *path);
- ret = -1;
- }
+ "failed to get the path xattr from disk for the "
+ " gfid %s. Trying to get path from the memory",
+ uuid_utoa_r (gfid, gfid_str));
/*
* Try with soft resolution of path if hard resolve fails. Because
@@ -767,10 +753,16 @@ br_stub_get_path_of_gfid (xlator_t *this, inode_t *parent, inode_t *inode,
* found in the inode table and better not to do inode_path() on the
* inode which has not been linked.
*/
- if (ret < 0 && inode)
+ if (ret < 0 && inode) {
ret = syncop_gfid_to_path_hard (parent->table,
FIRST_CHILD (this), gfid, inode,
path, _gf_false);
+ if (ret < 0)
+ gf_msg (this->name, GF_LOG_WARNING, 0,
+ BRS_MSG_PATH_GET_FAILED,
+ "failed to get the path from the memory for gfid %s",
+ uuid_utoa_r (gfid, gfid_str));
+ }
out:
return ret;