diff options
author | Amar Tumballi <amar@gluster.com> | 2011-07-12 05:29:25 +0000 |
---|---|---|
committer | Anand Avati <avati@gluster.com> | 2011-07-12 05:37:17 -0700 |
commit | 42e0b1731d925fd5a0bfaa107a2e01ba47fae125 (patch) | |
tree | 6832fa9a42ead07f0dee487c5ffce9e40fdf93db /xlators/cluster/dht/src/dht-linkfile.c | |
parent | 2c688714a2a081fc1be30febcd839caf8e201456 (diff) |
cluster/distribute: send proper 'params' dictionary during linkfile creation
when the code path enters the 'subvol_filled()' case, local->params is set,
which contains the 'gfid-req' value, but the linkfile creation was not
checking for its existance.
Signed-off-by: Amar Tumballi <amar@gluster.com>
Signed-off-by: Anand Avati <avati@gluster.com>
BUG: 3159 (mknod (linkfile creation) with no 'gfid-req' key)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3159
Diffstat (limited to 'xlators/cluster/dht/src/dht-linkfile.c')
-rw-r--r-- | xlators/cluster/dht/src/dht-linkfile.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/xlators/cluster/dht/src/dht-linkfile.c b/xlators/cluster/dht/src/dht-linkfile.c index 76f1df50184..e936f3119a6 100644 --- a/xlators/cluster/dht/src/dht-linkfile.c +++ b/xlators/cluster/dht/src/dht-linkfile.c @@ -52,15 +52,20 @@ dht_linkfile_create (call_frame_t *frame, fop_mknod_cbk_t linkfile_cbk, { dht_local_t *local = NULL; dict_t *dict = NULL; + int need_unref = 0; int ret = 0; local = frame->local; local->linkfile.linkfile_cbk = linkfile_cbk; local->linkfile.srcvol = tovol; - dict = dict_new (); - if (!dict) - goto out; + dict = local->params; + if (!dict) { + dict = dict_new (); + if (!dict) + goto out; + need_unref = 1; + } if (!uuid_is_null (local->gfid)) { ret = dict_set_static_bin (dict, "gfid-req", local->gfid, 16); @@ -83,13 +88,17 @@ dht_linkfile_create (call_frame_t *frame, fop_mknod_cbk_t linkfile_cbk, fromvol, fromvol->fops->mknod, loc, S_IFREG | DHT_LINKFILE_MODE, 0, dict); - if (dict) + if (need_unref && dict) dict_unref (dict); return 0; out: local->linkfile.linkfile_cbk (frame, NULL, frame->this, -1, ENOMEM, loc->inode, NULL, NULL, NULL); + + if (need_unref && dict) + dict_unref (dict); + return 0; } |