summaryrefslogtreecommitdiffstats
path: root/xlators/features/quota/src/quota.h
diff options
context:
space:
mode:
authorvmallika <vmallika@redhat.com>2014-12-24 15:13:36 +0530
committerRaghavendra G <rgowdapp@redhat.com>2014-12-27 05:52:07 -0800
commitb6ea761969f85fbb0f22810eb3a3bf1476c8792c (patch)
tree935f71888ebcd80b5ff428a02167e2aac45c5483 /xlators/features/quota/src/quota.h
parent2947752836bd3ddbc572b59cecd24557050ec2a5 (diff)
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>
Diffstat (limited to 'xlators/features/quota/src/quota.h')
-rw-r--r--xlators/features/quota/src/quota.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/xlators/features/quota/src/quota.h b/xlators/features/quota/src/quota.h
index 5a4bcb2b1e0..3d6c65f8fb6 100644
--- a/xlators/features/quota/src/quota.h
+++ b/xlators/features/quota/src/quota.h
@@ -181,6 +181,9 @@ typedef void
(*quota_ancestry_built_t) (struct list_head *parents, inode_t *inode,
int32_t op_ret, int32_t op_errno, void *data);
+typedef void
+(*quota_fop_continue_t) (call_frame_t *frame);
+
struct quota_local {
gf_lock_t lock;
uint32_t validate_count;
@@ -196,7 +199,9 @@ struct quota_local {
gf_boolean_t skip_check;
char just_validated;
fop_lookup_cbk_t validate_cbk;
+ quota_fop_continue_t fop_continue_cbk;
inode_t *inode;
+ uuid_t common_ancestor; /* Used by quota_rename */
call_stub_t *stub;
struct iobref *iobref;
quota_limit_t limit;
@@ -235,4 +240,19 @@ void
quota_log_usage (xlator_t *this, quota_inode_ctx_t *ctx, inode_t *inode,
int64_t delta);
+int
+quota_build_ancestry (inode_t *inode, quota_ancestry_built_t ancestry_cbk,
+ void *data);
+
+void
+quota_get_limit_dir (call_frame_t *frame, inode_t *cur_inode, xlator_t *this);
+
+int32_t
+quota_check_limit (call_frame_t *frame, inode_t *inode, xlator_t *this,
+ char *name, uuid_t par);
+
+int
+quota_fill_inodectx (xlator_t *this, inode_t *inode, dict_t *dict,
+ loc_t *loc, struct iatt *buf, int32_t *op_errno);
+
#endif