diff options
author | Raghavendra G <rgowdapp@redhat.com> | 2013-08-19 13:14:53 +0530 |
---|---|---|
committer | Raghavendra G <rgowdapp@redhat.com> | 2013-09-03 10:28:04 +0530 |
commit | 09652872d8c462b972ccbd16edc7ebecb9bae037 (patch) | |
tree | 652c4167f6c5d96284cfec6a36308ae2bd739629 | |
parent | 3def7409c72793759374086c6811198b2b6900d7 (diff) |
features/quota: cleanup of quota_inode_ctx_get
Change-Id: I49798f8b84a260e72bed722e08af6a194005dec1
BUG: 969461
Signed-off-by: Raghavendra G <rgowdapp@redhat.com>
-rw-r--r-- | xlators/features/quota/src/quota.c | 141 |
1 files changed, 58 insertions, 83 deletions
diff --git a/xlators/features/quota/src/quota.c b/xlators/features/quota/src/quota.c index e52d39b2..1a4661d5 100644 --- a/xlators/features/quota/src/quota.c +++ b/xlators/features/quota/src/quota.c @@ -26,12 +26,10 @@ struct volume_options options[]; static int32_t -__quota_init_inode_ctx (inode_t *inode, int64_t hard_lim, int64_t soft_lim, - xlator_t *this, dict_t *dict, struct iatt *buf, +__quota_init_inode_ctx (inode_t *inode, xlator_t *this, quota_inode_ctx_t **context) { int32_t ret = -1; - int64_t *size = 0; quota_inode_ctx_t *ctx = NULL; if (inode == NULL) { @@ -40,12 +38,6 @@ __quota_init_inode_ctx (inode_t *inode, int64_t hard_lim, int64_t soft_lim, QUOTA_ALLOC_OR_GOTO (ctx, quota_inode_ctx_t, out); - ctx->hard_lim = hard_lim; - ctx->soft_lim = soft_lim; - - if (buf) - ctx->buf = *buf; - LOCK_INIT(&ctx->lock); if (context != NULL) { @@ -54,14 +46,6 @@ __quota_init_inode_ctx (inode_t *inode, int64_t hard_lim, int64_t soft_lim, INIT_LIST_HEAD (&ctx->parents); - if (dict != NULL) { - ret = dict_get_bin (dict, QUOTA_SIZE_KEY, (void **) &size); - if (ret == 0) { - ctx->size = ntoh64 (*size); - gettimeofday (&ctx->tv, NULL); - } - } - ret = __inode_ctx_put (inode, this, (uint64_t )(long)ctx); if (ret == -1) { gf_log (this->name, GF_LOG_WARNING, @@ -697,8 +681,7 @@ err: } static int32_t -quota_inode_ctx_get (inode_t *inode, int64_t hard_lim, int64_t soft_lim, - xlator_t *this, dict_t *dict, struct iatt *buf, +quota_inode_ctx_get (inode_t *inode, xlator_t *this, quota_inode_ctx_t **ctx, char create_if_absent) { int32_t ret = 0; @@ -711,8 +694,7 @@ quota_inode_ctx_get (inode_t *inode, int64_t hard_lim, int64_t soft_lim, if ((ret == 0) && (ctx != NULL)) { *ctx = (quota_inode_ctx_t *) (unsigned long)ctx_int; } else if (create_if_absent) { - ret = __quota_init_inode_ctx (inode, hard_lim, soft_lim, - this, dict, buf, ctx); + ret = __quota_init_inode_ctx (inode, this, ctx); } } UNLOCK (&inode->lock); @@ -720,6 +702,40 @@ quota_inode_ctx_get (inode_t *inode, int64_t hard_lim, int64_t soft_lim, return ret; } +inline int +quota_get_limits (xlator_t *this, dict_t *dict, int64_t *hard_lim, + int64_t *soft_lim) +{ + quota_limit_t *limit = NULL; + quota_priv_t *priv = NULL; + int64_t soft_lim_percent = 0, *ptr = NULL; + int ret = 0; + + if ((this == NULL) || (dict == NULL) || (hard_lim == NULL) + || (soft_lim == NULL)) + goto out; + + priv = this->private; + + ret = dict_get_bin (dict, QUOTA_LIMIT_KEY, (void **) &ptr); + limit = (quota_limit_t *)ptr; + + if (limit) { + *hard_lim = ntoh64 (limit->hard_lim); + soft_lim_percent = ntoh64 (limit->soft_lim_percent); + } + + if (soft_lim_percent < 0) { + soft_lim_percent = priv->default_soft_lim; + } + + if ((*hard_lim > 0) && (soft_lim_percent > 0)) { + *soft_lim = (soft_lim_percent * *hard_lim)/100; + } + +out: + return 0; +} int quota_fill_inodectx (xlator_t *this, inode_t *inode, dict_t *dict, @@ -730,20 +746,9 @@ quota_fill_inodectx (xlator_t *this, inode_t *inode, dict_t *dict, quota_inode_ctx_t *ctx = NULL; quota_dentry_t *dentry = NULL; uint64_t value = 0; - quota_limit_t *limit = NULL; - int64_t hard_lim = -1, soft_lim_percent = -1; - int64_t soft_lim = -1, *ptr = NULL; - - if (dict != NULL) { - ret = dict_get_bin (dict, QUOTA_LIMIT_KEY, (void **) &ptr); - limit = (quota_limit_t *)ptr; - - if (limit) { - hard_lim = ntoh64 (limit->hard_lim); - soft_lim_percent = ntoh64 (limit->soft_lim_percent); - } - } + int64_t hard_lim = -1, soft_lim = -1; + quota_get_limits (this, dict, &hard_lim, &soft_lim); inode_ctx_get (inode, this, &value); ctx = (quota_inode_ctx_t *)(unsigned long)value; @@ -755,12 +760,7 @@ quota_fill_inodectx (xlator_t *this, inode_t *inode, dict_t *dict, goto out; } - if (hard_lim > 0) { - soft_lim = (soft_lim_percent * hard_lim)/100; - } - - ret = quota_inode_ctx_get (inode, hard_lim, soft_lim, - this, dict, buf, &ctx, 1); + ret = quota_inode_ctx_get (inode, this, &ctx, 1); if ((ret == -1) || (ctx == NULL)) { gf_log (this->name, GF_LOG_WARNING, "cannot create quota " "context in inode(gfid:%s)", @@ -1083,8 +1083,7 @@ quota_writev (call_frame_t *frame, xlator_t *this, fd_t *fd, frame->local = local; local->loc.inode = inode_ref (fd->inode); - ret = quota_inode_ctx_get (fd->inode, -1, -1, this, NULL, NULL, &ctx, - 0); + ret = quota_inode_ctx_get (fd->inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", @@ -1264,7 +1263,7 @@ quota_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, goto unwind; } - ret = quota_inode_ctx_get (inode, -1, -1, this, NULL, buf, &ctx, 1); + ret = quota_inode_ctx_get (inode, this, &ctx, 1); if ((ret == -1) || (ctx == NULL)) { gf_log (this->name, GF_LOG_WARNING, "cannot create quota " "context in inode(gfid:%s)", @@ -1518,7 +1517,7 @@ quota_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this, quota_update_size (this, local->loc.parent, NULL, NULL, (buf->ia_blocks * 512)); - ret = quota_inode_ctx_get (inode, -1, -1, this, NULL, NULL, &ctx, 0); + ret = quota_inode_ctx_get (inode, this, &ctx, 0); if ((ret == -1) || (ctx == NULL)) { gf_log (this->name, GF_LOG_WARNING, "cannot find quota " "context in %s (gfid:%s)", local->loc.path, @@ -1640,16 +1639,6 @@ quota_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc, goto err; } - ret = quota_inode_ctx_get (oldloc->inode, -1, -1, this, NULL, NULL, - &ctx, 0); - if (ctx == NULL) { - gf_log (this->name, GF_LOG_WARNING, - "quota context not set in inode (gfid:%s)", - oldloc->inode ? uuid_utoa (oldloc->inode->gfid) : "0"); - op_errno = EINVAL; - goto err; - } - stub = fop_link_stub (frame, quota_link_helper, oldloc, newloc, xdata); if (stub == NULL) { goto err; @@ -1659,8 +1648,7 @@ quota_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc, local->stub = stub; local->delta = ctx->buf.ia_blocks * 512; - ret = quota_inode_ctx_get (oldloc->inode, -1, -1, this, NULL, NULL, - &ctx, 0); + ret = quota_inode_ctx_get (oldloc->inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", @@ -1731,8 +1719,7 @@ quota_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this, goto out; } - ret = quota_inode_ctx_get (local->oldloc.inode, -1, -1, this, NULL, - NULL, &ctx, 0); + ret = quota_inode_ctx_get (local->oldloc.inode, this, &ctx, 0); if ((ret == -1) || (ctx == NULL)) { gf_log (this->name, GF_LOG_WARNING, "quota context not" "set in inode(gfid:%s)", @@ -1886,8 +1873,7 @@ quota_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc, if (IA_ISREG (oldloc->inode->ia_type) || IA_ISLNK (oldloc->inode->ia_type)) { - ret = quota_inode_ctx_get (oldloc->inode, -1, -1, this, NULL, - NULL, &ctx, 0); + ret = quota_inode_ctx_get (oldloc->inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", @@ -1939,8 +1925,7 @@ quota_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, quota_update_size (this, local->loc.parent, NULL, NULL, size); - quota_inode_ctx_get (local->loc.inode, -1, -1, this, NULL, NULL, - &ctx, 1); + quota_inode_ctx_get (local->loc.inode, this, &ctx, 1); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", @@ -2085,8 +2070,7 @@ quota_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, quota_update_size (this, local->loc.inode, NULL, NULL, delta); - quota_inode_ctx_get (local->loc.inode, -1, -1, this, NULL, NULL, - &ctx, 0); + quota_inode_ctx_get (local->loc.inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", @@ -2170,8 +2154,7 @@ quota_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, quota_update_size (this, local->loc.inode, NULL, NULL, delta); - quota_inode_ctx_get (local->loc.inode, -1, -1, this, NULL, NULL, - &ctx, 0); + quota_inode_ctx_get (local->loc.inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", @@ -2329,8 +2312,7 @@ quota_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, goto out; } - quota_inode_ctx_get (local->loc.inode, -1, -1, this, NULL, NULL, - &ctx, 0); + quota_inode_ctx_get (local->loc.inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_DEBUG, "quota context not set in inode (gfid:%s)", @@ -2405,8 +2387,7 @@ quota_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, goto out; } - quota_inode_ctx_get (local->loc.inode, -1, -1, this, NULL, NULL, - &ctx, 0); + quota_inode_ctx_get (local->loc.inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", @@ -2477,8 +2458,7 @@ quota_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, goto out; } - quota_inode_ctx_get (local->loc.inode, -1, -1, this, NULL, NULL, - &ctx, 0); + quota_inode_ctx_get (local->loc.inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", @@ -2556,8 +2536,7 @@ quota_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this, goto out; } - quota_inode_ctx_get (local->loc.inode, -1, -1, this, NULL, NULL, - &ctx, 0); + quota_inode_ctx_get (local->loc.inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", @@ -2630,8 +2609,7 @@ quota_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, goto out; } - quota_inode_ctx_get (local->loc.inode, -1, -1, this, NULL, NULL, - &ctx, 0); + quota_inode_ctx_get (local->loc.inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", @@ -2704,8 +2682,7 @@ quota_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, goto out; } - quota_inode_ctx_get (local->loc.inode, -1, -1, this, NULL, NULL, - &ctx, 0); + quota_inode_ctx_get (local->loc.inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_DEBUG, "quota context not set in inode (gfid:%s)", @@ -2783,8 +2760,7 @@ quota_fsetattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, goto out; } - quota_inode_ctx_get (local->loc.inode, -1, -1, this, NULL, NULL, - &ctx, 0); + quota_inode_ctx_get (local->loc.inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", @@ -2855,7 +2831,7 @@ quota_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this, goto unwind; } - ret = quota_inode_ctx_get (inode, -1, -1, this, NULL, buf, &ctx, 1); + ret = quota_inode_ctx_get (inode, this, &ctx, 1); if ((ret == -1) || (ctx == NULL)) { gf_log (this->name, GF_LOG_WARNING, "cannot create quota " "context in inode (gfid:%s)", uuid_utoa (inode->gfid)); @@ -3461,8 +3437,7 @@ quota_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode, frame->local = local; local->loc.inode = inode_ref (fd->inode); - ret = quota_inode_ctx_get (fd->inode, -1, -1, this, NULL, NULL, &ctx, - 0); + ret = quota_inode_ctx_get (fd->inode, this, &ctx, 0); if (ctx == NULL) { gf_log (this->name, GF_LOG_WARNING, "quota context not set in inode (gfid:%s)", |