summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libglusterfs/src/call-stub.c15
-rw-r--r--libglusterfs/src/call-stub.h9
-rw-r--r--libglusterfs/src/defaults.c10
-rw-r--r--libglusterfs/src/defaults.h8
-rw-r--r--libglusterfs/src/xlator.h9
-rw-r--r--xlators/cluster/afr/src/afr-common.c2
-rw-r--r--xlators/cluster/afr/src/afr-dir-write.c8
-rw-r--r--xlators/cluster/afr/src/afr-dir-write.h3
-rw-r--r--xlators/cluster/afr/src/afr.h1
-rw-r--r--xlators/cluster/dht/src/dht-common.c13
-rw-r--r--xlators/cluster/dht/src/dht-common.h1
-rw-r--r--xlators/cluster/dht/src/dht-helper.c5
-rw-r--r--xlators/cluster/dht/src/nufa.c10
-rw-r--r--xlators/cluster/dht/src/switch.c8
-rw-r--r--xlators/cluster/stripe/src/stripe.c5
-rw-r--r--xlators/debug/error-gen/src/error-gen.c4
-rw-r--r--xlators/debug/io-stats/src/io-stats.c5
-rw-r--r--xlators/debug/trace/src/trace.c4
-rw-r--r--xlators/features/access-control/src/access-control.c10
-rw-r--r--xlators/features/locks/src/posix.c4
-rw-r--r--xlators/features/quota/src/quota.c4
-rw-r--r--xlators/features/read-only/src/read-only.c2
-rw-r--r--xlators/features/trash/src/trash.c8
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.c3
-rw-r--r--xlators/nfs/server/src/nfs-fops.c5
-rw-r--r--xlators/performance/io-cache/src/io-cache.c5
-rw-r--r--xlators/performance/io-threads/src/io-threads.c8
-rw-r--r--xlators/performance/read-ahead/src/read-ahead.c4
-rw-r--r--xlators/performance/stat-prefetch/src/stat-prefetch.c4
-rw-r--r--xlators/performance/write-behind/src/write-behind.c7
-rw-r--r--xlators/protocol/client/src/client.c2
-rw-r--r--xlators/protocol/legacy/client/src/client-protocol.c2
-rw-r--r--xlators/protocol/legacy/server/src/server-helpers.c5
-rw-r--r--xlators/protocol/legacy/server/src/server-protocol.c3
-rw-r--r--xlators/protocol/legacy/server/src/server-protocol.h1
-rw-r--r--xlators/protocol/server/src/server-helpers.c5
-rw-r--r--xlators/protocol/server/src/server.h1
-rw-r--r--xlators/protocol/server/src/server3_1-fops.c3
-rw-r--r--xlators/storage/posix/src/posix.c2
39 files changed, 123 insertions, 85 deletions
diff --git a/libglusterfs/src/call-stub.c b/libglusterfs/src/call-stub.c
index 89788b3b8dc..4e62276fc5f 100644
--- a/libglusterfs/src/call-stub.c
+++ b/libglusterfs/src/call-stub.c
@@ -772,11 +772,9 @@ out:
call_stub_t *
-fop_create_stub (call_frame_t *frame,
- fop_create_t fn,
- loc_t *loc,
- int32_t flags,
- mode_t mode, fd_t *fd)
+fop_create_stub (call_frame_t *frame, fop_create_t fn,
+ loc_t *loc, int32_t flags, mode_t mode,
+ fd_t *fd, dict_t *params)
{
call_stub_t *stub = NULL;
@@ -792,6 +790,8 @@ fop_create_stub (call_frame_t *frame,
stub->args.create.mode = mode;
if (fd)
stub->args.create.fd = fd_ref (fd);
+ if (params)
+ stub->args.create.params = dict_ref (params);
out:
return stub;
}
@@ -2130,7 +2130,8 @@ call_resume_wind (call_stub_t *stub)
&stub->args.create.loc,
stub->args.create.flags,
stub->args.create.mode,
- stub->args.create.fd);
+ stub->args.create.fd,
+ stub->args.create.params);
break;
}
case GF_FOP_STAT:
@@ -3315,6 +3316,8 @@ call_stub_destroy_wind (call_stub_t *stub)
loc_wipe (&stub->args.create.loc);
if (stub->args.create.fd)
fd_unref (stub->args.create.fd);
+ if (stub->args.create.params)
+ dict_unref (stub->args.create.params);
break;
}
case GF_FOP_STAT:
diff --git a/libglusterfs/src/call-stub.h b/libglusterfs/src/call-stub.h
index a284ef929a7..fd79cc2d6cf 100644
--- a/libglusterfs/src/call-stub.h
+++ b/libglusterfs/src/call-stub.h
@@ -232,6 +232,7 @@ typedef struct {
int32_t flags;
mode_t mode;
fd_t *fd;
+ dict_t *params;
} create;
struct {
fop_create_cbk_t fn;
@@ -778,11 +779,9 @@ fop_link_cbk_stub (call_frame_t *frame,
struct iatt *postparent);
call_stub_t *
-fop_create_stub (call_frame_t *frame,
- fop_create_t fn,
- loc_t *loc,
- int32_t flags,
- mode_t mode, fd_t *fd);
+fop_create_stub (call_frame_t *frame, fop_create_t fn,
+ loc_t *loc, int32_t flags, mode_t mode,
+ fd_t *fd, dict_t *params);
call_stub_t *
fop_create_cbk_stub (call_frame_t *frame,
diff --git a/libglusterfs/src/defaults.c b/libglusterfs/src/defaults.c
index f5317cf8648..8a450b6d6d6 100644
--- a/libglusterfs/src/defaults.c
+++ b/libglusterfs/src/defaults.c
@@ -471,16 +471,14 @@ default_create_cbk (call_frame_t *frame,
}
int32_t
-default_create (call_frame_t *frame,
- xlator_t *this,
- loc_t *loc,
- int32_t flags,
- mode_t mode, fd_t *fd)
+default_create (call_frame_t *frame, xlator_t *this,
+ loc_t *loc, int32_t flags, mode_t mode,
+ fd_t *fd, dict_t *params)
{
STACK_WIND (frame, default_create_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
return 0;
}
diff --git a/libglusterfs/src/defaults.h b/libglusterfs/src/defaults.h
index 2955bd8eb78..751380d3207 100644
--- a/libglusterfs/src/defaults.h
+++ b/libglusterfs/src/defaults.h
@@ -116,11 +116,9 @@ int32_t default_link (call_frame_t *frame,
loc_t *oldloc,
loc_t *newloc);
-int32_t default_create (call_frame_t *frame,
- xlator_t *this,
- loc_t *loc,
- int32_t flags,
- mode_t mode, fd_t *fd);
+int32_t default_create (call_frame_t *frame, xlator_t *this,
+ loc_t *loc, int32_t flags, mode_t mode,
+ fd_t *fd, dict_t *params);
int32_t default_open (call_frame_t *frame,
xlator_t *this,
diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h
index 208f7a64a56..10f0418df2d 100644
--- a/libglusterfs/src/xlator.h
+++ b/libglusterfs/src/xlator.h
@@ -477,12 +477,9 @@ typedef int32_t (*fop_link_t) (call_frame_t *frame,
loc_t *oldloc,
loc_t *newloc);
-typedef int32_t (*fop_create_t) (call_frame_t *frame,
- xlator_t *this,
- loc_t *loc,
- int32_t flags,
- mode_t mode,
- fd_t *fd);
+typedef int32_t (*fop_create_t) (call_frame_t *frame, xlator_t *this,
+ loc_t *loc, int32_t flags, mode_t mode,
+ fd_t *fd, dict_t *params);
/* Tell subsequent writes on the fd_t to fsync after every writev fop without
* requiring a fsync fop.
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c
index 22bb4322edd..6a732e1180d 100644
--- a/xlators/cluster/afr/src/afr-common.c
+++ b/xlators/cluster/afr/src/afr-common.c
@@ -391,6 +391,8 @@ afr_local_cleanup (afr_local_t *local, xlator_t *this)
{ /* create */
if (local->cont.create.fd)
fd_unref (local->cont.create.fd);
+ if (local->cont.create.params)
+ dict_unref (local->cont.create.params);
}
{ /* writev */
diff --git a/xlators/cluster/afr/src/afr-dir-write.c b/xlators/cluster/afr/src/afr-dir-write.c
index 27dd3517794..3e9f48f9a2c 100644
--- a/xlators/cluster/afr/src/afr-dir-write.c
+++ b/xlators/cluster/afr/src/afr-dir-write.c
@@ -253,7 +253,8 @@ afr_create_wind (call_frame_t *frame, xlator_t *this)
&local->loc,
local->cont.create.flags,
local->cont.create.mode,
- local->cont.create.fd);
+ local->cont.create.fd,
+ local->cont.create.params);
if (!--call_count)
break;
}
@@ -280,7 +281,8 @@ afr_create_done (call_frame_t *frame, xlator_t *this)
int
afr_create (call_frame_t *frame, xlator_t *this,
- loc_t *loc, int32_t flags, mode_t mode, fd_t *fd)
+ loc_t *loc, int32_t flags, mode_t mode,
+ fd_t *fd, dict_t *params)
{
afr_private_t * priv = NULL;
afr_local_t * local = NULL;
@@ -326,6 +328,8 @@ afr_create (call_frame_t *frame, xlator_t *this,
local->cont.create.flags = flags;
local->cont.create.mode = mode;
local->cont.create.fd = fd_ref (fd);
+ if (params)
+ local->cont.create.params = dict_ref (params);
if (loc->parent)
local->cont.create.parent_ino = loc->parent->ino;
diff --git a/xlators/cluster/afr/src/afr-dir-write.h b/xlators/cluster/afr/src/afr-dir-write.h
index 4fa618b6575..5369ba968a0 100644
--- a/xlators/cluster/afr/src/afr-dir-write.h
+++ b/xlators/cluster/afr/src/afr-dir-write.h
@@ -22,7 +22,8 @@
int32_t
afr_create (call_frame_t *frame, xlator_t *this,
- loc_t *loc, int32_t flags, mode_t mode, fd_t *fd);
+ loc_t *loc, int32_t flags, mode_t mode,
+ fd_t *fd, dict_t *params);
int32_t
afr_mknod (call_frame_t *frame, xlator_t *this,
diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h
index 6df8c697ca6..f222cb0f866 100644
--- a/xlators/cluster/afr/src/afr.h
+++ b/xlators/cluster/afr/src/afr.h
@@ -480,6 +480,7 @@ typedef struct _afr_local {
uint64_t gen;
ino_t parent_ino;
fd_t *fd;
+ dict_t *params;
int32_t flags;
mode_t mode;
inode_t *inode;
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
index cef73a9d681..17ddb3247ab 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -3242,7 +3242,8 @@ dht_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,
STACK_WIND (frame, dht_create_cbk,
cached_subvol, cached_subvol->fops->create,
- &local->loc, local->flags, local->mode, local->fd);
+ &local->loc, local->flags, local->mode,
+ local->fd, local->params);
return 0;
err:
@@ -3252,7 +3253,8 @@ dht_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,
int
dht_create (call_frame_t *frame, xlator_t *this,
- loc_t *loc, int32_t flags, mode_t mode, fd_t *fd)
+ loc_t *loc, int32_t flags, mode_t mode,
+ fd_t *fd, dict_t *params)
{
int op_errno = -1;
int ret = -1;
@@ -3284,7 +3286,7 @@ dht_create (call_frame_t *frame, xlator_t *this,
local->loc.path, subvol->name, loc->path);
STACK_WIND (frame, dht_create_cbk,
subvol, subvol->fops->create,
- &local->loc, flags, mode, fd);
+ &local->loc, flags, mode, fd, params);
goto done;
}
@@ -3309,7 +3311,7 @@ dht_create (call_frame_t *frame, xlator_t *this,
"creating %s on %s", loc->path, subvol->name);
STACK_WIND (frame, dht_create_cbk,
subvol, subvol->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
goto done;
}
/* Choose the minimum filled volume, and create the
@@ -3318,6 +3320,7 @@ dht_create (call_frame_t *frame, xlator_t *this,
avail_subvol = dht_free_disk_available_subvol (this, subvol);
if (avail_subvol != subvol) {
local->fd = fd_ref (fd);
+ local->params = dict_ref (params);
local->flags = flags;
local->mode = mode;
@@ -3335,7 +3338,7 @@ dht_create (call_frame_t *frame, xlator_t *this,
"creating %s on %s", loc->path, subvol->name);
STACK_WIND (frame, dht_create_cbk,
subvol, subvol->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
done:
return 0;
diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h
index 464832c4125..58edca9f66c 100644
--- a/xlators/cluster/dht/src/dht-common.h
+++ b/xlators/cluster/dht/src/dht-common.h
@@ -81,6 +81,7 @@ struct dht_local {
struct statvfs statvfs;
fd_t *fd;
inode_t *inode;
+ dict_t *params;
dict_t *xattr;
dict_t *xattr_req;
dht_layout_t *layout;
diff --git a/xlators/cluster/dht/src/dht-helper.c b/xlators/cluster/dht/src/dht-helper.c
index 6580f788db9..09c326289b8 100644
--- a/xlators/cluster/dht/src/dht-helper.c
+++ b/xlators/cluster/dht/src/dht-helper.c
@@ -199,6 +199,11 @@ dht_local_wipe (xlator_t *this, dht_local_t *local)
local->fd = NULL;
}
+ if (local->params) {
+ dict_unref (local->params);
+ local->params = NULL;
+ }
+
if (local->xattr_req)
dict_unref (local->xattr_req);
diff --git a/xlators/cluster/dht/src/nufa.c b/xlators/cluster/dht/src/nufa.c
index aaad5d5fa6e..e807ff304e0 100644
--- a/xlators/cluster/dht/src/nufa.c
+++ b/xlators/cluster/dht/src/nufa.c
@@ -302,7 +302,9 @@ nufa_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,
STACK_WIND (frame, dht_create_cbk,
local->cached_subvol, local->cached_subvol->fops->create,
- &local->loc, local->flags, local->mode, local->fd);
+ &local->loc, local->flags, local->mode, local->fd,
+ local->params);
+
return 0;
err:
@@ -313,7 +315,8 @@ nufa_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,
int
nufa_create (call_frame_t *frame, xlator_t *this,
- loc_t *loc, int32_t flags, mode_t mode, fd_t *fd)
+ loc_t *loc, int32_t flags, mode_t mode,
+ fd_t *fd, dict_t *params)
{
dht_local_t *local = NULL;
dht_conf_t *conf = NULL;
@@ -365,6 +368,7 @@ nufa_create (call_frame_t *frame, xlator_t *this,
}
local->fd = fd_ref (fd);
+ local->params = dict_ref (params);
local->mode = mode;
local->flags = flags;
@@ -380,7 +384,7 @@ nufa_create (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, dht_create_cbk,
subvol, subvol->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
return 0;
diff --git a/xlators/cluster/dht/src/switch.c b/xlators/cluster/dht/src/switch.c
index 5ec9e665731..f47ffb1fde4 100644
--- a/xlators/cluster/dht/src/switch.c
+++ b/xlators/cluster/dht/src/switch.c
@@ -405,7 +405,8 @@ switch_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,
STACK_WIND (frame, dht_create_cbk,
local->cached_subvol, local->cached_subvol->fops->create,
- &local->loc, local->flags, local->mode, local->fd);
+ &local->loc, local->flags, local->mode, local->fd,
+ local->params);
return 0;
@@ -417,7 +418,8 @@ switch_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,
int
switch_create (call_frame_t *frame, xlator_t *this,
- loc_t *loc, int32_t flags, mode_t mode, fd_t *fd)
+ loc_t *loc, int32_t flags, mode_t mode,
+ fd_t *fd, dict_t *params)
{
dht_local_t *local = NULL;
dht_conf_t *conf = NULL;
@@ -483,7 +485,7 @@ switch_create (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, dht_create_cbk,
subvol, subvol->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
return 0;
diff --git a/xlators/cluster/stripe/src/stripe.c b/xlators/cluster/stripe/src/stripe.c
index 05012b8914c..a13bba34f52 100644
--- a/xlators/cluster/stripe/src/stripe.c
+++ b/xlators/cluster/stripe/src/stripe.c
@@ -2055,7 +2055,7 @@ out:
*/
int32_t
stripe_create (call_frame_t *frame, xlator_t *this, loc_t *loc,
- int32_t flags, mode_t mode, fd_t *fd)
+ int32_t flags, mode_t mode, fd_t *fd, dict_t *params)
{
stripe_private_t *priv = NULL;
stripe_local_t *local = NULL;
@@ -2102,7 +2102,8 @@ stripe_create (call_frame_t *frame, xlator_t *this, loc_t *loc,
trav = this->children;
while (trav) {
STACK_WIND (frame, stripe_create_cbk, trav->xlator,
- trav->xlator->fops->create, loc, flags, mode, fd);
+ trav->xlator->fops->create, loc, flags,
+ mode, fd, params);
trav = trav->next;
}
diff --git a/xlators/debug/error-gen/src/error-gen.c b/xlators/debug/error-gen/src/error-gen.c
index 8e37d7a1c6e..0a2e77d26d5 100644
--- a/xlators/debug/error-gen/src/error-gen.c
+++ b/xlators/debug/error-gen/src/error-gen.c
@@ -971,7 +971,7 @@ error_gen_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
error_gen_create (call_frame_t *frame, xlator_t *this, loc_t *loc,
- int32_t flags, mode_t mode, fd_t *fd)
+ int32_t flags, mode_t mode, fd_t *fd, dict_t *params)
{
int op_errno = 0;
eg_t *egp = NULL;
@@ -993,7 +993,7 @@ error_gen_create (call_frame_t *frame, xlator_t *this, loc_t *loc,
STACK_WIND (frame, error_gen_create_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
return 0;
}
diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c
index 97a14ce4592..adc45ae87a9 100644
--- a/xlators/debug/io-stats/src/io-stats.c
+++ b/xlators/debug/io-stats/src/io-stats.c
@@ -1017,7 +1017,8 @@ io_stats_open (call_frame_t *frame, xlator_t *this,
int
io_stats_create (call_frame_t *frame, xlator_t *this,
- loc_t *loc, int32_t flags, mode_t mode, fd_t *fd)
+ loc_t *loc, int32_t flags, mode_t mode,
+ fd_t *fd, dict_t *params)
{
BUMP_FOP (CREATE);
@@ -1026,7 +1027,7 @@ io_stats_create (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, io_stats_create_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
return 0;
}
diff --git a/xlators/debug/trace/src/trace.c b/xlators/debug/trace/src/trace.c
index 7f8681ea75a..16ea557933f 100644
--- a/xlators/debug/trace/src/trace.c
+++ b/xlators/debug/trace/src/trace.c
@@ -1593,7 +1593,7 @@ trace_open (call_frame_t *frame, xlator_t *this, loc_t *loc,
int
trace_create (call_frame_t *frame, xlator_t *this, loc_t *loc,
- int32_t flags, mode_t mode, fd_t *fd)
+ int32_t flags, mode_t mode, fd_t *fd, dict_t *params)
{
if (trace_fop_names[GF_FOP_CREATE].enabled) {
gf_log (this->name, GF_LOG_NORMAL,
@@ -1604,7 +1604,7 @@ trace_create (call_frame_t *frame, xlator_t *this, loc_t *loc,
STACK_WIND (frame, trace_create_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
return 0;
}
diff --git a/xlators/features/access-control/src/access-control.c b/xlators/features/access-control/src/access-control.c
index c33eb55a15f..407596684f6 100644
--- a/xlators/features/access-control/src/access-control.c
+++ b/xlators/features/access-control/src/access-control.c
@@ -1156,10 +1156,11 @@ out:
int32_t
ac_create_resume (call_frame_t *frame, xlator_t *this, loc_t *loc,
- int32_t flags, mode_t mode, fd_t *fd)
+ int32_t flags, mode_t mode, fd_t *fd, dict_t *params)
{
STACK_WIND (frame, default_create_cbk, FIRST_CHILD(this),
- FIRST_CHILD(this)->fops->create, loc, flags, mode, fd);
+ FIRST_CHILD(this)->fops->create, loc, flags, mode,
+ fd, params);
return 0;
}
@@ -1197,13 +1198,14 @@ out:
int32_t
ac_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
- mode_t mode, fd_t *fd)
+ mode_t mode, fd_t *fd, dict_t *params)
{
call_stub_t *stub = NULL;
int ret = -EFAULT;
loc_t parentloc = {0, };
- stub = fop_create_stub (frame, ac_create_resume, loc, flags, mode, fd);
+ stub = fop_create_stub (frame, ac_create_resume, loc, flags, mode,
+ fd, params);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR, "cannot create call stub: "
"(out of memory)");
diff --git a/xlators/features/locks/src/posix.c b/xlators/features/locks/src/posix.c
index 9d4f01a11ec..37bec028ee7 100644
--- a/xlators/features/locks/src/posix.c
+++ b/xlators/features/locks/src/posix.c
@@ -466,11 +466,11 @@ unwind:
int
pl_create (call_frame_t *frame, xlator_t *this,
- loc_t *loc, int32_t flags, mode_t mode, fd_t *fd)
+ loc_t *loc, int32_t flags, mode_t mode, fd_t *fd, dict_t *params)
{
STACK_WIND (frame, pl_create_cbk,
FIRST_CHILD (this), FIRST_CHILD (this)->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
return 0;
}
diff --git a/xlators/features/quota/src/quota.c b/xlators/features/quota/src/quota.c
index 6d1d195b8ec..82107a0a1fc 100644
--- a/xlators/features/quota/src/quota.c
+++ b/xlators/features/quota/src/quota.c
@@ -635,7 +635,7 @@ quota_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
quota_create (call_frame_t *frame, xlator_t *this,
- loc_t *loc, int32_t flags, mode_t mode, fd_t *fd)
+ loc_t *loc, int32_t flags, mode_t mode, fd_t *fd, dict_t *params)
{
struct quota_priv *priv = NULL;
@@ -662,7 +662,7 @@ quota_create (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, quota_create_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
return 0;
}
diff --git a/xlators/features/read-only/src/read-only.c b/xlators/features/read-only/src/read-only.c
index b8ba9218415..85cd4c8e365 100644
--- a/xlators/features/read-only/src/read-only.c
+++ b/xlators/features/read-only/src/read-only.c
@@ -171,7 +171,7 @@ ro_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc)
int32_t
ro_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
- mode_t mode, fd_t *fd)
+ mode_t mode, fd_t *fd, dict_t *params)
{
STACK_UNWIND_STRICT (create, frame, -1, EROFS, NULL, NULL, NULL,
NULL, NULL);
diff --git a/xlators/features/trash/src/trash.c b/xlators/features/trash/src/trash.c
index 7a0b6f2b880..dd61929d7ff 100644
--- a/xlators/features/trash/src/trash.c
+++ b/xlators/features/trash/src/trash.c
@@ -899,7 +899,7 @@ trash_truncate_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
FIRST_CHILD(this), FIRST_CHILD(this)->fops->create,
&local->newloc, flags,
st_mode_from_ia (prot, local->loc.inode->ia_type),
- local->newfd);
+ local->newfd, NULL);
goto out;
}
}
@@ -1003,7 +1003,7 @@ trash_truncate_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
FIRST_CHILD(this)->fops->create,
&local->newloc, flags,
st_mode_from_ia (buf->ia_prot, local->loc.inode->ia_type),
- local->newfd);
+ local->newfd, NULL);
return 0;
}
@@ -1268,7 +1268,7 @@ trash_ftruncate_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
FIRST_CHILD(this)->fops->create,
&local->newloc, flags,
st_mode_from_ia (prot, local->loc.inode->ia_type),
- local->newfd);
+ local->newfd, NULL);
goto out;
}
}
@@ -1340,7 +1340,7 @@ trash_ftruncate_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
FIRST_CHILD(this)->fops->create, &local->newloc,
( O_CREAT | O_EXCL | O_WRONLY ),
st_mode_from_ia (buf->ia_prot, local->loc.inode->ia_type),
- local->newfd);
+ local->newfd, NULL);
return 0;
}
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
index 97309194819..18e4d918031 100644
--- a/xlators/mount/fuse/src/fuse-bridge.c
+++ b/xlators/mount/fuse/src/fuse-bridge.c
@@ -1519,7 +1519,8 @@ fuse_create_resume (fuse_state_t *state)
state->loc.path);
FUSE_FOP (state, fuse_create_cbk, GF_FOP_CREATE,
- create, &state->loc, state->flags, state->mode, fd);
+ create, &state->loc, state->flags, state->mode,
+ fd, NULL);
}
diff --git a/xlators/nfs/server/src/nfs-fops.c b/xlators/nfs/server/src/nfs-fops.c
index b5ff937825d..08d3d6a46d8 100644
--- a/xlators/nfs/server/src/nfs-fops.c
+++ b/xlators/nfs/server/src/nfs-fops.c
@@ -604,8 +604,9 @@ nfs_fop_create (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc,
nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err);
nfs_fop_save_root_ino (nfl, pathloc);
- STACK_WIND_COOKIE (frame, nfs_fop_create_cbk, xl, xl,xl->fops->create
- , pathloc, flags, mode, fd);
+ STACK_WIND_COOKIE (frame, nfs_fop_create_cbk, xl, xl, xl->fops->create,
+ pathloc, flags, mode, fd, NULL);
+
ret = 0;
err:
if (ret < 0) {
diff --git a/xlators/performance/io-cache/src/io-cache.c b/xlators/performance/io-cache/src/io-cache.c
index 211f47ece8a..88b4c7dbb2c 100644
--- a/xlators/performance/io-cache/src/io-cache.c
+++ b/xlators/performance/io-cache/src/io-cache.c
@@ -783,7 +783,7 @@ ioc_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
*/
int32_t
ioc_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
- mode_t mode, fd_t *fd)
+ mode_t mode, fd_t *fd, dict_t *params)
{
ioc_local_t *local = NULL;
@@ -800,7 +800,8 @@ ioc_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
frame->local = local;
STACK_WIND (frame, ioc_create_cbk, FIRST_CHILD(this),
- FIRST_CHILD(this)->fops->create, loc, flags, mode, fd);
+ FIRST_CHILD(this)->fops->create, loc, flags, mode,
+ fd, params);
return 0;
}
diff --git a/xlators/performance/io-threads/src/io-threads.c b/xlators/performance/io-threads/src/io-threads.c
index 3e65306ced1..5992944ab42 100644
--- a/xlators/performance/io-threads/src/io-threads.c
+++ b/xlators/performance/io-threads/src/io-threads.c
@@ -737,25 +737,25 @@ iot_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
iot_create_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc,
- int32_t flags, mode_t mode, fd_t *fd)
+ int32_t flags, mode_t mode, fd_t *fd, dict_t *params)
{
STACK_WIND (frame, iot_create_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
return 0;
}
int
iot_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
- mode_t mode, fd_t *fd)
+ mode_t mode, fd_t *fd, dict_t *params)
{
call_stub_t *stub = NULL;
int ret = -1;
stub = fop_create_stub (frame, iot_create_wrapper, loc, flags, mode,
- fd);
+ fd, params);
if (!stub) {
gf_log (this->name, GF_LOG_ERROR,
"cannot create \"create\" call stub"
diff --git a/xlators/performance/read-ahead/src/read-ahead.c b/xlators/performance/read-ahead/src/read-ahead.c
index 2b6e2dc8800..067c5b29a31 100644
--- a/xlators/performance/read-ahead/src/read-ahead.c
+++ b/xlators/performance/read-ahead/src/read-ahead.c
@@ -201,12 +201,12 @@ ra_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
int
ra_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
- mode_t mode, fd_t *fd)
+ mode_t mode, fd_t *fd, dict_t *params)
{
STACK_WIND (frame, ra_create_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
return 0;
}
diff --git a/xlators/performance/stat-prefetch/src/stat-prefetch.c b/xlators/performance/stat-prefetch/src/stat-prefetch.c
index 0fad5285c24..6039bd019b9 100644
--- a/xlators/performance/stat-prefetch/src/stat-prefetch.c
+++ b/xlators/performance/stat-prefetch/src/stat-prefetch.c
@@ -1510,7 +1510,7 @@ out:
int32_t
sp_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
- mode_t mode, fd_t *fd)
+ mode_t mode, fd_t *fd, dict_t *params)
{
sp_local_t *local = NULL;
int32_t op_errno = -1, ret = -1;
@@ -1562,7 +1562,7 @@ out:
} else {
STACK_WIND (frame, sp_create_cbk, FIRST_CHILD(this),
FIRST_CHILD(this)->fops->create, loc, flags,
- mode, fd);
+ mode, fd, params);
}
return 0;
}
diff --git a/xlators/performance/write-behind/src/write-behind.c b/xlators/performance/write-behind/src/write-behind.c
index 23f2d56b95a..4437afce0cf 100644
--- a/xlators/performance/write-behind/src/write-behind.c
+++ b/xlators/performance/write-behind/src/write-behind.c
@@ -1422,15 +1422,14 @@ out:
int32_t
wb_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
- mode_t mode, fd_t *fd)
+ mode_t mode, fd_t *fd, dict_t *params)
{
frame->local = (void *)(long)flags;
- STACK_WIND (frame,
- wb_create_cbk,
+ STACK_WIND (frame, wb_create_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->create,
- loc, flags, mode, fd);
+ loc, flags, mode, fd, params);
return 0;
}
diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c
index 02479607ece..98289b1d67e 100644
--- a/xlators/protocol/client/src/client.c
+++ b/xlators/protocol/client/src/client.c
@@ -559,7 +559,7 @@ out:
int32_t
client_create (call_frame_t *frame, xlator_t *this, loc_t *loc,
- int32_t flags, mode_t mode, fd_t *fd)
+ int32_t flags, mode_t mode, fd_t *fd, dict_t *params)
{
int ret = -1;
clnt_conf_t *conf = NULL;
diff --git a/xlators/protocol/legacy/client/src/client-protocol.c b/xlators/protocol/legacy/client/src/client-protocol.c
index 64f513bf43c..e688e0e56b2 100644
--- a/xlators/protocol/legacy/client/src/client-protocol.c
+++ b/xlators/protocol/legacy/client/src/client-protocol.c
@@ -685,7 +685,7 @@ protocol_client_xfer (call_frame_t *frame, xlator_t *this, transport_t *trans,
int
client_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,
- mode_t mode, fd_t *fd)
+ mode_t mode, fd_t *fd, dict_t *params)
{
gf_hdr_common_t *hdr = NULL;
gf_fop_create_req_t *req = NULL;
diff --git a/xlators/protocol/legacy/server/src/server-helpers.c b/xlators/protocol/legacy/server/src/server-helpers.c
index 79104752ff1..08f89af5aba 100644
--- a/xlators/protocol/legacy/server/src/server-helpers.c
+++ b/xlators/protocol/legacy/server/src/server-helpers.c
@@ -86,6 +86,11 @@ free_old_server_state (server_state_t *state)
state->fd = NULL;
}
+ if (state->params) {
+ dict_unref (state->params);
+ state->params = NULL;
+ }
+
if (state->iobref) {
iobref_unref (state->iobref);
state->iobref = NULL;
diff --git a/xlators/protocol/legacy/server/src/server-protocol.c b/xlators/protocol/legacy/server/src/server-protocol.c
index 56acc59b791..1fbe86923a0 100644
--- a/xlators/protocol/legacy/server/src/server-protocol.c
+++ b/xlators/protocol/legacy/server/src/server-protocol.c
@@ -2885,7 +2885,8 @@ server_create_resume (call_frame_t *frame, xlator_t *bound_xl)
STACK_WIND (frame, server_create_cbk,
bound_xl, bound_xl->fops->create,
- &(state->loc), state->flags, state->mode, state->fd);
+ &(state->loc), state->flags, state->mode,
+ state->fd, state->params);
return 0;
err:
diff --git a/xlators/protocol/legacy/server/src/server-protocol.h b/xlators/protocol/legacy/server/src/server-protocol.h
index 56d23fdbfab..13691287132 100644
--- a/xlators/protocol/legacy/server/src/server-protocol.h
+++ b/xlators/protocol/legacy/server/src/server-protocol.h
@@ -163,6 +163,7 @@ struct _server_state {
int valid;
fd_t *fd;
+ dict_t *params;
int flags;
int wbflags;
struct iobuf *iobuf;
diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c
index af1ba1a4eb8..eab8f571d93 100644
--- a/xlators/protocol/server/src/server-helpers.c
+++ b/xlators/protocol/server/src/server-helpers.c
@@ -105,6 +105,11 @@ free_state (server_state_t *state)
state->fd = NULL;
}
+ if (state->params) {
+ dict_unref (state->params);
+ state->params = NULL;
+ }
+
if (state->iobref) {
iobref_unref (state->iobref);
state->iobref = NULL;
diff --git a/xlators/protocol/server/src/server.h b/xlators/protocol/server/src/server.h
index b58e8a5fada..453eee57e1c 100644
--- a/xlators/protocol/server/src/server.h
+++ b/xlators/protocol/server/src/server.h
@@ -162,6 +162,7 @@ struct _server_state {
int valid;
fd_t *fd;
+ dict_t *params;
int flags;
int wbflags;
struct iovec payload_vector[MAX_IOVEC];
diff --git a/xlators/protocol/server/src/server3_1-fops.c b/xlators/protocol/server/src/server3_1-fops.c
index 7748ef81324..644b84a2072 100644
--- a/xlators/protocol/server/src/server3_1-fops.c
+++ b/xlators/protocol/server/src/server3_1-fops.c
@@ -2492,7 +2492,8 @@ server_create_resume (call_frame_t *frame, xlator_t *bound_xl)
STACK_WIND (frame, server_create_cbk,
bound_xl, bound_xl->fops->create,
- &(state->loc), state->flags, state->mode, state->fd);
+ &(state->loc), state->flags, state->mode,
+ state->fd, state->params);
return 0;
err:
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
index 6788606f341..aae903fee07 100644
--- a/xlators/storage/posix/src/posix.c
+++ b/xlators/storage/posix/src/posix.c
@@ -1998,7 +1998,7 @@ posix_truncate (call_frame_t *frame,
int32_t
posix_create (call_frame_t *frame, xlator_t *this,
loc_t *loc, int32_t flags, mode_t mode,
- fd_t *fd)
+ fd_t *fd, dict_t *params)
{
int32_t op_ret = -1;
int32_t op_errno = 0;