summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/afr/src/afr-dir-write.c
diff options
context:
space:
mode:
authorPranith Kumar K <pkarampu@redhat.com>2016-03-14 10:59:38 +0530
committerPranith Kumar Karampuri <pkarampu@redhat.com>2016-04-29 06:57:39 -0700
commitb246b07896fefb261c9fb07f3f29f0d03b81b88d (patch)
tree90891fa20acd22529e2d2dcc53faec39e53134ea /xlators/cluster/afr/src/afr-dir-write.c
parentf8948e2c5ce3154f571c8ae16eb5804560e26590 (diff)
dht/afr/client/posix: Fail mkdir without gfid-req
Do not allow directory creations without gfids as after the directories are created, operations on them fail anyway. So it is better to fail mkdir. BUG: 1317361 Change-Id: I8f8e3b38bbded1960b7215bac0432500f7e78038 Signed-off-by: Pranith Kumar K <pkarampu@redhat.com> Reviewed-on: http://review.gluster.org/13690 Smoke: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Krutika Dhananjay <kdhananj@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators/cluster/afr/src/afr-dir-write.c')
-rw-r--r--xlators/cluster/afr/src/afr-dir-write.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/xlators/cluster/afr/src/afr-dir-write.c b/xlators/cluster/afr/src/afr-dir-write.c
index b6b81d7..457cc98 100644
--- a/xlators/cluster/afr/src/afr-dir-write.c
+++ b/xlators/cluster/afr/src/afr-dir-write.c
@@ -732,13 +732,19 @@ afr_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,
local->cont.mkdir.mode = mode;
local->umask = umask;
- if (xdata)
- local->xdata_req = dict_copy_with_ref (xdata, NULL);
- else
- local->xdata_req = dict_new ();
+ if (!xdata || !dict_get (xdata, "gfid-req")) {
+ op_errno = EPERM;
+ gf_msg_callingfn (this->name, GF_LOG_WARNING, op_errno,
+ AFR_MSG_GFID_NULL, "mkdir: %s is received "
+ "without gfid-req %p", loc->path, xdata);
+ goto out;
+ }
- if (!local->xdata_req)
- goto out;
+ local->xdata_req = dict_copy_with_ref (xdata, NULL);
+ if (!local->xdata_req) {
+ op_errno = ENOMEM;
+ goto out;
+ }
local->op = GF_FOP_MKDIR;
local->transaction.wind = afr_mkdir_wind;