summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xlators/features/marker/src/marker-quota-helper.c21
-rw-r--r--xlators/features/marker/src/marker-quota.c24
-rw-r--r--xlators/features/marker/src/marker.c93
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);