summaryrefslogtreecommitdiffstats
path: root/xlators/features/quota
diff options
context:
space:
mode:
authorvmallika <vmallika@redhat.com>2015-06-18 12:02:50 +0530
committerRaghavendra G <rgowdapp@redhat.com>2015-06-22 04:11:39 -0700
commit4673b50ecf8ed55b7d8bde55e9580cfde748ef0a (patch)
tree813f0ab6c3ddbff3f3ab356df6e474d79849c72b /xlators/features/quota
parentc13e7d8cb22fb530f765359829f748b9b94103fc (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>
Diffstat (limited to 'xlators/features/quota')
-rw-r--r--xlators/features/quota/src/quota.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/xlators/features/quota/src/quota.c b/xlators/features/quota/src/quota.c
index 6e2b3ea..f4f09d7 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,