diff options
author | vmallika <vmallika@redhat.com> | 2016-03-16 13:31:10 +0530 |
---|---|---|
committer | Raghavendra G <rgowdapp@redhat.com> | 2016-03-21 23:28:56 -0700 |
commit | 68665d0fc4a827e9933b94da8c4a2977b1a5cee6 (patch) | |
tree | 8c8966b8c8d23f0c363ac764d42262cf1b105b5e /xlators/features/marker/src/marker.c | |
parent | 8eaa3506ead4f11b81b146a9e56575c79f3aad7b (diff) |
marker: set inode ctx before lookup unwind
When a file is unlinked before it was accounted by the marker,
then we may see error "ctx for the node ... is NULL" at many places.
This is actually not an error and can be ignored.
It is better to set the inode ctx before lookup/create is unwind
back to protocol server
Change-Id: I462b5542951f2fc2964f59af7a31978979dab1de
BUG: 1318158
Signed-off-by: vmallika <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/13748
Smoke: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Diffstat (limited to 'xlators/features/marker/src/marker.c')
-rw-r--r-- | xlators/features/marker/src/marker.c | 93 |
1 files changed, 75 insertions, 18 deletions
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); |