summaryrefslogtreecommitdiffstats
path: root/xlators/features/changetimerecorder
diff options
context:
space:
mode:
authorJiffin Tony Thottan <jthottan@redhat.com>2015-03-25 15:04:19 +0530
committerVijay Bellur <vbellur@redhat.com>2015-04-24 11:07:25 -0700
commitb72bc58ecc108a2fddbdb6f606cd86a57ca5a68f (patch)
treefbc1af361c628aa9cead9a2a979fbe2faadcf6d0 /xlators/features/changetimerecorder
parent4973d0ea608147ff186f13ab51090f59986f1c9f (diff)
features/trash : Notify CTR translator if an unlink happens to a file
This implementation is same as the posix_unlink_cbk() where CTR sends a request during a unlink to send the number of links to the inode and posix obliges sending it using the unwind xdata dict. For Trash xlator a unlink is stat + mkdir(if parent is not present) + rename. And hence this is handled in trash_unlink_rename_cbk(). Change-Id: I402e83567b88e3c9fe171379693c82937af567f9 BUG: 1205545 Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com> Signed-off-by: Joseph Fernandes <josferna@redhat.com> Signed-off-by: Anoop C S <achiraya@redhat.com> Reviewed-on: http://review.gluster.org/9989 Tested-by: NetBSD Build System Tested-by: Joseph Fernandes Reviewed-by: Joseph Fernandes Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Niels de Vos <ndevos@redhat.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/features/changetimerecorder')
-rw-r--r--xlators/features/changetimerecorder/src/changetimerecorder.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/xlators/features/changetimerecorder/src/changetimerecorder.c b/xlators/features/changetimerecorder/src/changetimerecorder.c
index 80deefbd4b2..42470a92ef9 100644
--- a/xlators/features/changetimerecorder/src/changetimerecorder.c
+++ b/xlators/features/changetimerecorder/src/changetimerecorder.c
@@ -451,11 +451,6 @@ ctr_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
remaining_links = -1;
}
- /*As the xdata is no more required by CTR Xlator.*/
- if (xdata) {
- dict_unref (xdata);
- }
-
/*This is not the only link*/
if (remaining_links != 1) {
@@ -476,8 +471,6 @@ ctr_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
}
}
-
-
out:
STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno, preparent,
postparent, NULL);
@@ -494,6 +487,7 @@ ctr_unlink (call_frame_t *frame, xlator_t *this,
gf_ctr_inode_context_t *_inode_cx = &ctr_inode_cx;
gf_ctr_link_context_t ctr_link_cx;
gf_ctr_link_context_t *_link_cx = &ctr_link_cx;
+ gf_boolean_t is_xdata_created = _gf_false;
GF_ASSERT (frame);
@@ -517,8 +511,6 @@ ctr_unlink (call_frame_t *frame, xlator_t *this,
"Failed inserting unlink wind");
}
-
-
/*
*
* Sending CTR_REQUEST_LINK_COUNT_XDATA
@@ -526,8 +518,10 @@ ctr_unlink (call_frame_t *frame, xlator_t *this,
*
* */
/*create xdata if NULL*/
- if (!xdata)
+ if (!xdata) {
xdata = dict_new();
+ is_xdata_created = (xdata) ? _gf_true : _gf_false;
+ }
if (!xdata) {
gf_log (this->name, GF_LOG_ERROR,
"xdata is NULL :"
@@ -540,18 +534,20 @@ ctr_unlink (call_frame_t *frame, xlator_t *this,
if (ret) {
gf_log (this->name, GF_LOG_ERROR,
"Failed setting CTR_REQUEST_LINK_COUNT_XDATA");
- if (xdata) {
+ if (is_xdata_created) {
dict_unref (xdata);
}
goto out;
}
-
-
out:
STACK_WIND (frame, ctr_unlink_cbk, FIRST_CHILD (this),
FIRST_CHILD (this)->fops->unlink,
loc, xflag, xdata);
+
+ if (is_xdata_created)
+ dict_unref (xdata);
+
return 0;
}