summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorPranith Kumar K <pkarampu@redhat.com>2018-03-21 18:06:54 +0530
committerPranith Kumar Karampuri <pkarampu@redhat.com>2018-04-10 13:39:23 +0000
commitd686517cfa0fba75cce96c1876f5e57fc43d2434 (patch)
tree835cd9ec75caa81f0ceeb21b074a29e79bfeb004 /xlators
parent4fa3cc86d0c5160eccb998ba8bc950b924d7d477 (diff)
features/index: Choose different base file on EMLINK error
Change-Id: I4648816af908539efdc2528608aa2ebf7f0d0e2f fixes: bz#1553777 BUG: 1553777 Signed-off-by: Pranith Kumar K <pkarampu@redhat.com> (cherry picked from commit bb12f2109a01856e8184e13cf984210d20155b13)
Diffstat (limited to 'xlators')
-rw-r--r--xlators/features/index/src/index.c27
1 files changed, 9 insertions, 18 deletions
diff --git a/xlators/features/index/src/index.c b/xlators/features/index/src/index.c
index 975d5f998bd..0819f047127 100644
--- a/xlators/features/index/src/index.c
+++ b/xlators/features/index/src/index.c
@@ -559,14 +559,18 @@ out:
}
int
-index_link_to_base (xlator_t *this, char *base, size_t base_len,
- char *fpath, const char *subdir)
+index_link_to_base (xlator_t *this, char *fpath, const char *subdir)
{
int ret = 0;
int fd = 0;
int op_errno = 0;
uuid_t index = {0};
index_priv_t *priv = this->private;
+ char base[PATH_MAX] = {0};
+
+ index_get_index (priv, index);
+ make_index_path (priv->index_basepath, subdir,
+ index, base, sizeof (base));
ret = sys_link (base, fpath);
if (!ret || (errno == EEXIST)) {
@@ -584,7 +588,7 @@ index_link_to_base (xlator_t *this, char *base, size_t base_len,
} else if (op_errno == EMLINK) {
index_generate_index (priv, index);
make_index_path (priv->index_basepath, subdir,
- index, base, base_len);
+ index, base, sizeof (base));
} else {
goto out;
}
@@ -619,9 +623,7 @@ index_add (xlator_t *this, uuid_t gfid, const char *subdir,
index_xattrop_type_t type)
{
char gfid_path[PATH_MAX] = {0};
- char index_path[PATH_MAX] = {0};
int ret = -1;
- uuid_t index = {0};
index_priv_t *priv = NULL;
struct stat st = {0};
@@ -638,11 +640,7 @@ index_add (xlator_t *this, uuid_t gfid, const char *subdir,
ret = sys_stat (gfid_path, &st);
if (!ret)
goto out;
- index_get_index (priv, index);
- make_index_path (priv->index_basepath, subdir,
- index, index_path, sizeof (index_path));
- ret = index_link_to_base (this, index_path, sizeof (index_path),
- gfid_path, subdir);
+ ret = index_link_to_base (this, gfid_path, subdir);
out:
return ret;
}
@@ -795,8 +793,6 @@ index_entry_create (xlator_t *this, inode_t *inode, char *filename)
int op_errno = 0;
char pgfid_path[PATH_MAX] = {0};
char entry_path[PATH_MAX] = {0};
- char entry_base_index_path[PATH_MAX] = {0};
- uuid_t index = {0};
index_priv_t *priv = NULL;
index_inode_ctx_t *ctx = NULL;
@@ -834,12 +830,7 @@ index_entry_create (xlator_t *this, inode_t *inode, char *filename)
snprintf (entry_path, sizeof(entry_path), "%s/%s", pgfid_path,
filename);
- index_get_index (priv, index);
- make_index_path (priv->index_basepath, ENTRY_CHANGES_SUBDIR, index,
- entry_base_index_path, sizeof(entry_base_index_path));
- ret = index_link_to_base (this, entry_base_index_path,
- sizeof (entry_base_index_path),
- entry_path, ENTRY_CHANGES_SUBDIR);
+ ret = index_link_to_base (this, entry_path, ENTRY_CHANGES_SUBDIR);
out:
if (op_errno)
ret = -op_errno;