diff options
author | vmallika <vmallika@redhat.com> | 2015-01-08 16:03:04 +0530 |
---|---|---|
committer | Raghavendra G <rgowdapp@redhat.com> | 2015-01-19 02:39:40 -0800 |
commit | 8d73f6288249757662cf36e746835e3ecd84add1 (patch) | |
tree | feacd870c011a3067de51dc2cb5290748fe6e78d /xlators/features/quota/src/quota.h | |
parent | 10e4add35f64c24fe9ef03dc6824975fc9db1455 (diff) |
quota: For a link operation, do quota_check_limit only till the
common ancestor of src and dst file
In a dht_rename, if src_cached and dst_hashed are different, then
rename is split into link and unlink.
We need to handle quota_link properly.
We have fixed quota_rename in patch# 8940, we need to handle quota_link
similarly
> http://review.gluster.org/#/c/8940/
> quota: For a rename operation, do quota_check_limit only till the
> common ancestor of src and dst file
> Example:
> set quota limit set to 1GB on /
> create a file /a1/b1/file1 of 600MB
> mv /a1/b1/file1 /a1/b1/file2
> This rename fails as it takes delta into account which sums up to 1.2BG.
> Though we are not creating new file, we still get quota exceeded error.
> So quota enforce should happen only till b1.
> Similarly:
> mv /a/b/c/file /a/b/x/y/file
> quota enforce should happen only till dir 'b'
> Change-Id: Ia1e5363da876c3d71bd424e67a8bb28b7ac1c7c1
> BUG: 1153964
> Signed-off-by: vmallika <vmallika@redhat.com>
> Reviewed-on: http://review.gluster.org/8940
> Tested-by: Gluster Build System <jenkins@build.gluster.com>
> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
> Tested-by: Raghavendra G <rgowdapp@redhat.com>
Change-Id: I2c814018d17f7af1807c1d1d162d8bdcbb31e491
BUG: 1153964
Signed-off-by: vmallika <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/9419
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/src/quota.h')
-rw-r--r-- | xlators/features/quota/src/quota.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/xlators/features/quota/src/quota.h b/xlators/features/quota/src/quota.h index 3d6c65f8fb6..f21aed6c38f 100644 --- a/xlators/features/quota/src/quota.h +++ b/xlators/features/quota/src/quota.h @@ -51,6 +51,12 @@ if (!is_quota_on) \ goto label; +#define QUOTA_WIND_FOR_INTERNAL_FOP(xdata, label) \ + do { \ + if (xdata && dict_get (xdata, GLUSTERFS_INTERNAL_FOP_KEY)) \ + goto label; \ + } while (0) + #define DID_REACH_LIMIT(lim, prev_size, cur_size) \ ((cur_size) >= (lim) && (prev_size) < (lim)) @@ -196,7 +202,6 @@ struct quota_local { int32_t op_ret; int32_t op_errno; int64_t size; - gf_boolean_t skip_check; char just_validated; fop_lookup_cbk_t validate_cbk; quota_fop_continue_t fop_continue_cbk; |