From f7bc35358c27d6260d5d1c4e22f1708d7ab60a98 Mon Sep 17 00:00:00 2001 From: vmallika Date: Wed, 27 May 2015 16:25:27 +0530 Subject: 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 Reviewed-on: http://review.gluster.org/10918 Tested-by: NetBSD Build System Reviewed-by: Vijay Bellur --- xlators/features/marker/src/marker.c | 51 ++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 20 deletions(-) (limited to 'xlators/features/marker/src/marker.c') 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 " -- cgit