diff options
author | vmallika <vmallika@redhat.com> | 2015-06-18 12:02:50 +0530 |
---|---|---|
committer | Raghavendra G <rgowdapp@redhat.com> | 2015-06-22 04:11:39 -0700 |
commit | 4673b50ecf8ed55b7d8bde55e9580cfde748ef0a (patch) | |
tree | 813f0ab6c3ddbff3f3ab356df6e474d79849c72b | |
parent | c13e7d8cb22fb530f765359829f748b9b94103fc (diff) |
quota: allow writes when with ENOENT/ESTALE on active fd
This is a backport of http://review.gluster.org/#/c/11307/
> We may get ENOENT/ESTALE in case of below scenario
> fd = open file.txt
> unlink file.txt
> write on fd
> Here build_ancestry can fail as the file is removed.
> For now ignore ENOENT/ESTALE on active fd with
> writev and fallocate.
> We need to re-visit this code once we understand
> how other file-system behave in this scenario
>
> Below patch fixes the issue in DHT:
> http://review.gluster.org/#/c/11097
>
> Change-Id: I7be683583b808c280e3ea2ddd036c1558a6d53e5
> BUG: 1188242
> Signed-off-by: vmallika <vmallika@redhat.com>
Change-Id: Ic836d200689fe6f27d4675bc0ff89063b7dc3882
BUG: 1219358
Signed-off-by: vmallika <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/11326
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Tested-by: Raghavendra G <rgowdapp@redhat.com>
-rw-r--r-- | xlators/features/quota/src/quota.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/xlators/features/quota/src/quota.c b/xlators/features/quota/src/quota.c index 6e2b3eaf4b4..f4f09d75a97 100644 --- a/xlators/features/quota/src/quota.c +++ b/xlators/features/quota/src/quota.c @@ -1584,6 +1584,20 @@ quota_writev_helper (call_frame_t *frame, xlator_t *this, fd_t *fd, vector = new_vector; count = new_count; + } else if (op_errno == ENOENT || op_errno == ESTALE) { + /* We may get ENOENT/ESTALE in case of below scenario + * fd = open file.txt + * unlink file.txt + * write on fd + * Here build_ancestry can fail as the file is removed. + * For now ignore ENOENT/ESTALE with writes on active fd + * We need to re-visit this code once we understand + * how other file-system behave in this scenario + */ + gf_msg_debug (this->name, 0, "quota enforcer failed " + "with ENOENT/ESTALE on %s, cannot check " + "quota limits and allowing writes", + uuid_utoa (fd->inode->gfid)); } else { goto unwind; } @@ -4606,7 +4620,23 @@ quota_fallocate_helper (call_frame_t *frame, xlator_t *this, fd_t *fd, if (local->op_ret == -1) { op_errno = local->op_errno; - goto unwind; + if (op_errno == ENOENT || op_errno == ESTALE) { + /* We may get ENOENT/ESTALE in case of below scenario + * fd = open file.txt + * unlink file.txt + * fallocate on fd + * Here build_ancestry can fail as the file is removed. + * For now ignore ENOENT/ESTALE on active fd + * We need to re-visit this code once we understand + * how other file-system behave in this scenario + */ + gf_msg_debug (this->name, 0, "quota enforcer failed " + "with ENOENT/ESTALE on %s, cannot check " + "quota limits and allowing fallocate", + uuid_utoa (fd->inode->gfid)); + } else { + goto unwind; + } } STACK_WIND (frame, quota_fallocate_cbk, |