diff options
-rw-r--r-- | xlators/features/marker/src/marker-quota-helper.c | 21 | ||||
-rw-r--r-- | xlators/features/marker/src/marker-quota.c | 24 | ||||
-rw-r--r-- | xlators/features/marker/src/marker.c | 93 |
3 files changed, 99 insertions, 39 deletions
diff --git a/xlators/features/marker/src/marker-quota-helper.c b/xlators/features/marker/src/marker-quota-helper.c index d1fabccf18e..ce8280234ac 100644 --- a/xlators/features/marker/src/marker-quota-helper.c +++ b/xlators/features/marker/src/marker-quota-helper.c @@ -60,9 +60,13 @@ out: int32_t mq_inode_loc_fill (const char *parent_gfid, inode_t *inode, loc_t *loc) { - char *resolvedpath = NULL; - inode_t *parent = NULL; - int ret = -1; + char *resolvedpath = NULL; + inode_t *parent = NULL; + quota_inode_ctx_t *ctx = NULL; + xlator_t *this = NULL; + int ret = -1; + + this = THIS; if ((!inode) || (!loc)) return ret; @@ -96,6 +100,17 @@ ignore_parent: if (ret < 0) goto err; + ret = mq_inode_ctx_get (inode, this, &ctx); + if (ret < 0 || ctx == NULL) + ctx = mq_inode_ctx_new (inode, this); + if (ctx == NULL) { + gf_log (this->name, GF_LOG_WARNING, "mq_inode_ctx_new " + "failed for %s", uuid_utoa (inode->gfid)); + ret = -1; + goto err; + } + ret = 0; + err: if (parent) inode_unref (parent); diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c index e12cfab2527..7de0dd57a56 100644 --- a/xlators/features/marker/src/marker-quota.c +++ b/xlators/features/marker/src/marker-quota.c @@ -1033,26 +1033,14 @@ mq_prevalidate_txn (xlator_t *this, loc_t *origin_loc, loc_t *loc, } } - if (ctx) - ret = mq_inode_ctx_get (loc->inode, this, ctx); - else - ret = mq_inode_ctx_get (loc->inode, this, &ctxtmp); - + ret = mq_inode_ctx_get (loc->inode, this, &ctxtmp); if (ret < 0) { - if (ctx) { - *ctx = mq_inode_ctx_new (loc->inode, this); - if (*ctx == NULL) { - gf_log_callingfn (this->name, GF_LOG_WARNING, - "mq_inode_ctx_new failed for " - "%s", loc->path); - ret = -1; - goto out; - } - } else { - gf_log_callingfn (this->name, GF_LOG_WARNING, "ctx for " - "is NULL for %s", loc->path); - } + gf_log_callingfn (this->name, GF_LOG_WARNING, "inode ctx for " + "is NULL for %s", loc->path); + goto out; } + if (ctx) + *ctx = ctxtmp; ret = 0; out: diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index 10c7e04f21f..48a275e2783 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -715,6 +715,7 @@ marker_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, { marker_conf_t *priv = NULL; marker_local_t *local = NULL; + quota_inode_ctx_t *ctx = NULL; if (op_ret == -1) { gf_log (this->name, GF_LOG_TRACE, "error occurred " @@ -724,6 +725,17 @@ marker_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, local = (marker_local_t *) frame->local; frame->local = NULL; + priv = this->private; + + if (op_ret >= 0 && inode && (priv->feature_enabled & GF_QUOTA)) { + ctx = mq_inode_ctx_new (inode, this); + if (ctx == NULL) { + gf_log (this->name, GF_LOG_WARNING, "mq_inode_ctx_new " + "failed for %s", uuid_utoa (inode->gfid)); + op_ret = -1; + op_errno = ENOMEM; + } + } STACK_UNWIND_STRICT (mkdir, frame, op_ret, op_errno, inode, buf, preparent, postparent, xdata); @@ -734,8 +746,6 @@ marker_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (gf_uuid_is_null (local->loc.gfid)) gf_uuid_copy (local->loc.gfid, buf->ia_gfid); - priv = this->private; - if (priv->feature_enabled & GF_QUOTA) mq_create_xattrs_txn (this, &local->loc, NULL); @@ -790,6 +800,7 @@ marker_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, { marker_local_t *local = NULL; marker_conf_t *priv = NULL; + quota_inode_ctx_t *ctx = NULL; if (op_ret == -1) { gf_log (this->name, GF_LOG_TRACE, "error occurred " @@ -799,6 +810,17 @@ marker_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, local = (marker_local_t *) frame->local; frame->local = NULL; + priv = this->private; + + if (op_ret >= 0 && inode && (priv->feature_enabled & GF_QUOTA)) { + ctx = mq_inode_ctx_new (inode, this); + if (ctx == NULL) { + gf_log (this->name, GF_LOG_WARNING, "mq_inode_ctx_new " + "failed for %s", uuid_utoa (inode->gfid)); + op_ret = -1; + op_errno = ENOMEM; + } + } STACK_UNWIND_STRICT (create, frame, op_ret, op_errno, fd, inode, buf, preparent, postparent, xdata); @@ -809,8 +831,6 @@ marker_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (gf_uuid_is_null (local->loc.gfid)) gf_uuid_copy (local->loc.gfid, buf->ia_gfid); - priv = this->private; - if (priv->feature_enabled & GF_QUOTA) mq_create_xattrs_txn (this, &local->loc, buf); @@ -1892,6 +1912,7 @@ marker_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, { marker_conf_t *priv = NULL; marker_local_t *local = NULL; + quota_inode_ctx_t *ctx = NULL; if (op_ret == -1) { gf_log (this->name, GF_LOG_TRACE, "%s occurred while " @@ -1901,6 +1922,17 @@ marker_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, local = (marker_local_t *) frame->local; frame->local = NULL; + priv = this->private; + + if (op_ret >= 0 && inode && (priv->feature_enabled & GF_QUOTA)) { + ctx = mq_inode_ctx_new (inode, this); + if (ctx == NULL) { + gf_log (this->name, GF_LOG_WARNING, "mq_inode_ctx_new " + "failed for %s", uuid_utoa (inode->gfid)); + op_ret = -1; + op_errno = ENOMEM; + } + } STACK_UNWIND_STRICT (symlink, frame, op_ret, op_errno, inode, buf, preparent, postparent, xdata); @@ -1911,8 +1943,6 @@ marker_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (gf_uuid_is_null (local->loc.gfid)) gf_uuid_copy (local->loc.gfid, buf->ia_gfid); - priv = this->private; - if (priv->feature_enabled & GF_QUOTA) { mq_create_xattrs_txn (this, &local->loc, buf); } @@ -1967,6 +1997,7 @@ marker_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this, { marker_local_t *local = NULL; marker_conf_t *priv = NULL; + quota_inode_ctx_t *ctx = NULL; if (op_ret == -1) { gf_log (this->name, GF_LOG_TRACE, "%s occurred with " @@ -1976,6 +2007,17 @@ marker_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this, local = (marker_local_t *) frame->local; frame->local = NULL; + priv = this->private; + + if (op_ret >= 0 && inode && (priv->feature_enabled & GF_QUOTA)) { + ctx = mq_inode_ctx_new (inode, this); + if (ctx == NULL) { + gf_log (this->name, GF_LOG_WARNING, "mq_inode_ctx_new " + "failed for %s", uuid_utoa (inode->gfid)); + op_ret = -1; + op_errno = ENOMEM; + } + } STACK_UNWIND_STRICT (mknod, frame, op_ret, op_errno, inode, buf, preparent, postparent, xdata); @@ -1986,8 +2028,6 @@ marker_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (gf_uuid_is_null (local->loc.gfid)) gf_uuid_copy (local->loc.gfid, buf->ia_gfid); - priv = this->private; - if ((priv->feature_enabled & GF_QUOTA) && (S_ISREG (local->mode))) { mq_create_xattrs_txn (this, &local->loc, buf); } @@ -2813,10 +2853,11 @@ marker_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, int32_t op_errno, inode_t *inode, struct iatt *buf, dict_t *dict, struct iatt *postparent) { - marker_conf_t *priv = NULL; - marker_local_t *local = NULL; - dict_t *xattrs = NULL; - int32_t ret = -1; + marker_conf_t *priv = NULL; + marker_local_t *local = NULL; + dict_t *xattrs = NULL; + quota_inode_ctx_t *ctx = NULL; + int32_t ret = -1; priv = this->private; local = (marker_local_t *) frame->local; @@ -2847,6 +2888,16 @@ marker_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this, xattrs = dict_ref (dict); } + if (op_ret >= 0 && inode && (priv->feature_enabled & GF_QUOTA)) { + ctx = mq_inode_ctx_new (inode, this); + if (ctx == NULL) { + gf_log (this->name, GF_LOG_WARNING, "mq_inode_ctx_new " + "failed for %s", uuid_utoa (inode->gfid)); + op_ret = -1; + op_errno = ENOMEM; + } + } + unwind: STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf, xattrs, postparent); @@ -2985,12 +3036,13 @@ marker_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, int op_errno, gf_dirent_t *entries, dict_t *xdata) { - gf_dirent_t *entry = NULL; - marker_conf_t *priv = NULL; - marker_local_t *local = NULL; - loc_t loc = {0, }; - int ret = -1; - char *resolvedpath = NULL; + gf_dirent_t *entry = NULL; + marker_conf_t *priv = NULL; + marker_local_t *local = NULL; + loc_t loc = {0, }; + int ret = -1; + char *resolvedpath = NULL; + quota_inode_ctx_t *ctx = NULL; if (op_ret <= 0) goto unwind; @@ -3021,6 +3073,11 @@ marker_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, loc.path = resolvedpath; resolvedpath = NULL; + ctx = mq_inode_ctx_new (loc.inode, this); + if (ctx == NULL) + gf_log (this->name, GF_LOG_WARNING, "mq_inode_ctx_new " + "failed for %s", uuid_utoa (loc.inode->gfid)); + mq_xattr_state (this, &loc, entry->dict, entry->d_stat); loc_wipe (&loc); |