summaryrefslogtreecommitdiffstats
path: root/xlators/features/marker
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/features/marker')
-rw-r--r--xlators/features/marker/src/marker.c49
1 files changed, 43 insertions, 6 deletions
diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c
index 7622642e746..e7021647ca1 100644
--- a/xlators/features/marker/src/marker.c
+++ b/xlators/features/marker/src/marker.c
@@ -900,20 +900,56 @@ out:
return 0;
}
+
+int32_t
+marker_quota_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
+ int32_t op_ret, int32_t op_errno)
+{
+ marker_local_t *local = NULL, *oplocal = NULL;
+
+ if ((op_ret < 0) && (op_errno != ENOATTR)) {
+ goto unwind;
+ }
+
+ local = frame->local;
+ oplocal = local->oplocal;
+
+ STACK_WIND (frame, marker_rename_cbk, FIRST_CHILD(this),
+ FIRST_CHILD(this)->fops->rename, &oplocal->loc,
+ &local->loc);
+ return 0;
+
+unwind:
+ STACK_UNWIND_STRICT (rename, frame, -1, ENOMEM, NULL,
+ NULL, NULL, NULL, NULL);
+ local->oplocal = NULL;
+ marker_local_unref (local);
+ marker_local_unref (oplocal);
+ GF_FREE (local);
+ GF_FREE (oplocal);
+ return 0;
+}
+
+
int32_t
marker_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,
loc_t *newloc)
{
- int32_t ret = 0;
- marker_local_t *local = NULL;
- marker_local_t *oplocal = NULL;
- marker_conf_t *priv = NULL;
+ int32_t ret = 0;
+ marker_local_t *local = NULL;
+ marker_local_t *oplocal = NULL;
+ marker_conf_t *priv = NULL;
+ char contri_key[512] = {0,};
priv = this->private;
if (priv->feature_enabled == 0)
goto wind;
+ GET_CONTRI_KEY (contri_key, oldloc->parent->gfid, ret);
+ if (ret < 0)
+ goto err;
+
ALLOCATE_OR_GOTO (local, marker_local_t, err);
MARKER_INIT_LOCAL (frame, local);
@@ -934,8 +970,9 @@ marker_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,
if (ret == -1)
goto err;
wind:
- STACK_WIND (frame, marker_rename_cbk, FIRST_CHILD(this),
- FIRST_CHILD(this)->fops->rename, oldloc, newloc);
+
+ STACK_WIND (frame, marker_quota_removexattr_cbk, FIRST_CHILD(this),
+ FIRST_CHILD(this)->fops->removexattr, oldloc, contri_key);
return 0;
err:
STACK_UNWIND_STRICT (rename, frame, -1, ENOMEM, NULL,