diff options
author | Jiffin Tony Thottan <jthottan@redhat.com> | 2015-03-25 15:04:19 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2015-04-24 11:07:25 -0700 |
commit | b72bc58ecc108a2fddbdb6f606cd86a57ca5a68f (patch) | |
tree | fbc1af361c628aa9cead9a2a979fbe2faadcf6d0 /xlators/storage | |
parent | 4973d0ea608147ff186f13ab51090f59986f1c9f (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/storage')
-rw-r--r-- | xlators/storage/posix/src/posix-helpers.c | 3 | ||||
-rw-r--r-- | xlators/storage/posix/src/posix.c | 12 |
2 files changed, 12 insertions, 3 deletions
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c index f3d6d6c3da7..e1bd5b127fd 100644 --- a/xlators/storage/posix/src/posix-helpers.c +++ b/xlators/storage/posix/src/posix-helpers.c @@ -409,6 +409,9 @@ _posix_xattr_get_set (dict_t *xattr_req, char *key, data_t *data, } else if (fnmatch (marker_contri_key, key, 0) == 0) { ret = _posix_get_marker_quota_contributions (filler, key); + } else if (strcmp(key, CTR_REQUEST_LINK_COUNT_XDATA) == 0) { + ret = dict_set (filler->xattr, + CTR_REQUEST_LINK_COUNT_XDATA, data); } else { ret = _posix_xattr_get_set_from_backend (filler, key); } diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index 337f9b95fa2..8cbe2c5a02e 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -1652,11 +1652,12 @@ posix_unlink (call_frame_t *frame, xlator_t *this, if (!unwind_dict) { op_ret = 0; gf_log (this->name, GF_LOG_WARNING, - "Failed to creating unwind_dict"); + "Memory allocation failure while " + "creating unwind_dict"); goto out; } - /* Even if unwind_dict fails to set CTR_RESPONSE_LINK_COUNT_XDATA we will - * not mark the FOP unsuccessful + /* Even if unwind_dict fails to set CTR_RESPONSE_LINK_COUNT_XDATA we + * will not mark the FOP unsuccessful * because this dict is only used by CTR Xlator to clear * all records if link count == 0*/ op_ret = dict_set_uint32 (unwind_dict, CTR_RESPONSE_LINK_COUNT_XDATA, @@ -1678,6 +1679,11 @@ out: close (fd); } + /* unref unwind_dict*/ + if (unwind_dict) { + dict_unref (unwind_dict); + } + return 0; } |