diff options
author | vmallika <vmallika@redhat.com> | 2015-06-17 10:33:13 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2015-06-18 18:59:02 -0700 |
commit | 81972918a0b0252cfa7feefbb80182fa886a72f8 (patch) | |
tree | ce4685a0e4f7712845d7f447ca6d6409f6219c99 /xlators | |
parent | 26f17994a45210792a4af23fcbc8e1759218f2e8 (diff) |
quota: fix double accounting with rename operation
When a rename operation is performed, we are renaming
the file first and performing remove-xattr when reducing
the contri size from parents.
This remove-xattr fails as the file is alreday renamed,
this failure causes reduce-parent-size to abort resulting
in double quota accounting
This patch fixes the problem. We don't need to perform remove-xattr
operation on a file when performing reduce-parent-size txn as this
will be alreday done before starting reduce-parent-size txn
Change-Id: If86e3dbb0233f6deaaa90bee72cb0ec1689c7325
BUG: 1232572
Signed-off-by: vmallika <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/11264
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/features/marker/src/marker-quota.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c index 6d0830cde17..c33d8a46707 100644 --- a/xlators/features/marker/src/marker-quota.c +++ b/xlators/features/marker/src/marker-quota.c @@ -2583,9 +2583,11 @@ mq_remove_contri (xlator_t *this, loc_t *loc, inode_contribution_t *contri) ret = syncop_removexattr (FIRST_CHILD(this), loc, contri_key, 0, NULL); if (ret < 0) { - if (-ret == ENOENT || -ret == ESTALE) { + if (-ret == ENOENT || -ret == ESTALE || -ret == ENODATA) { /* Remove contri in done when unlink operation is * performed, so return success on ENOENT/ESTSLE + * rename operation removes xattr earlier, + * so return success on ENODATA */ ret = 0; } else { |