summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvmallika <vmallika@redhat.com>2015-05-27 16:25:27 +0530
committerVijay Bellur <vbellur@redhat.com>2015-05-27 09:09:22 -0700
commitf7bc35358c27d6260d5d1c4e22f1708d7ab60a98 (patch)
tree554d8f95d9ff20b846e94fb1536d9b2c3b3d021c
parentb7fde604e7fd42e6fc803bf7adfe66b5f441b8bb (diff)
quota: fix for spurious failure
During ancestry build, loc path was set to invalid path. path was set to one of its child instead of itself. Because of this quota accounting was going wrong This patch fix the issue Below mentioned tests removed from bad test list as part of patch# 10930 ./tests/basic/ec/quota.t ./tests/basic/quota-nfs.t ./tests/bugs/quota/bug-1035576.t Change-Id: Iaa65b2d968c04c9abcd476d0e9f588cb7fd39294 BUG: 1223798 Signed-off-by: vmallika <vmallika@redhat.com> Reviewed-on: http://review.gluster.org/10918 Tested-by: NetBSD Build System Reviewed-by: Vijay Bellur <vbellur@redhat.com>
-rw-r--r--xlators/features/marker/src/marker.c51
1 files changed, 31 insertions, 20 deletions
diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c
index a465723c1bb..9e064ef7c54 100644
--- a/xlators/features/marker/src/marker.c
+++ b/xlators/features/marker/src/marker.c
@@ -95,27 +95,33 @@ loc_wipe:
}
int
-marker_inode_loc_fill (inode_t *inode, char *name, loc_t *loc)
+_marker_inode_loc_fill (inode_t *inode, inode_t *parent, char *name, loc_t *loc)
{
char *resolvedpath = NULL;
int ret = -1;
- inode_t *parent = NULL;
+ gf_boolean_t free_parent = _gf_false;
if ((!inode) || (!loc))
return ret;
- parent = inode_parent (inode, NULL, NULL);
-
- ret = inode_path (inode, name, &resolvedpath);
+ if (parent && name)
+ ret = inode_path (parent, name, &resolvedpath);
+ else
+ ret = inode_path (inode, NULL, &resolvedpath);
if (ret < 0)
goto err;
+ if (parent == NULL) {
+ parent = inode_parent (inode, NULL, NULL);
+ free_parent = _gf_true;
+ }
+
ret = marker_loc_fill (loc, inode, parent, resolvedpath);
if (ret < 0)
goto err;
err:
- if (parent)
+ if (free_parent)
inode_unref (parent);
GF_FREE (resolvedpath);
@@ -123,6 +129,12 @@ err:
return ret;
}
+int
+marker_inode_loc_fill (inode_t *inode, loc_t *loc)
+{
+ return _marker_inode_loc_fill (inode, NULL, NULL, loc);
+}
+
int32_t
marker_trav_parent (marker_local_t *local)
{
@@ -138,7 +150,7 @@ marker_trav_parent (marker_local_t *local)
} else
parent = local->loc.parent;
- ret = marker_inode_loc_fill (parent, NULL, &loc);
+ ret = marker_inode_loc_fill (parent, &loc);
if (ret < 0) {
ret = -1;
@@ -789,7 +801,7 @@ marker_writev (call_frame_t *frame,
MARKER_INIT_LOCAL (frame, local);
- ret = marker_inode_loc_fill (fd->inode, NULL, &local->loc);
+ ret = marker_inode_loc_fill (fd->inode, &local->loc);
if (ret == -1)
goto err;
@@ -1728,7 +1740,7 @@ marker_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,
MARKER_INIT_LOCAL (frame, local);
- ret = marker_inode_loc_fill (fd->inode, NULL, &local->loc);
+ ret = marker_inode_loc_fill (fd->inode, &local->loc);
if (ret == -1)
goto err;
@@ -1946,7 +1958,7 @@ marker_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,
MARKER_INIT_LOCAL (frame, local);
- ret = marker_inode_loc_fill (fd->inode, NULL, &local->loc);
+ ret = marker_inode_loc_fill (fd->inode, &local->loc);
if (ret == -1)
goto err;
@@ -2015,7 +2027,7 @@ marker_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,
MARKER_INIT_LOCAL (frame, local);
- ret = marker_inode_loc_fill (fd->inode, NULL, &local->loc);
+ ret = marker_inode_loc_fill (fd->inode, &local->loc);
if (ret == -1)
goto err;
@@ -2082,7 +2094,7 @@ marker_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,
MARKER_INIT_LOCAL (frame, local);
- ret = marker_inode_loc_fill (fd->inode, NULL, &local->loc);
+ ret = marker_inode_loc_fill (fd->inode, &local->loc);
if (ret == -1)
goto err;
@@ -2412,7 +2424,7 @@ marker_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,
MARKER_INIT_LOCAL (frame, local);
- ret = marker_inode_loc_fill (fd->inode, NULL, &local->loc);
+ ret = marker_inode_loc_fill (fd->inode, &local->loc);
if (ret == -1)
goto err;
@@ -2478,7 +2490,7 @@ marker_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,
MARKER_INIT_LOCAL (frame, local);
- ret = marker_inode_loc_fill (fd->inode, NULL, &local->loc);
+ ret = marker_inode_loc_fill (fd->inode, &local->loc);
if (ret == -1)
goto err;
@@ -2749,12 +2761,11 @@ marker_build_ancestry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
parent = NULL;
}
- if (parent) {
- ret = marker_inode_loc_fill (parent,
- entry->d_name, &loc);
- } else {
- ret = marker_inode_loc_fill (entry->inode, NULL, &loc);
- }
+ if (parent)
+ _marker_inode_loc_fill (entry->inode, parent,
+ entry->d_name, &loc);
+ else
+ ret = marker_inode_loc_fill (entry->inode, &loc);
if (ret) {
gf_log (this->name, GF_LOG_WARNING, "Couldn't build "