diff options
author | Pranith Kumar K <pkarampu@redhat.com> | 2019-10-24 17:58:03 +0530 |
---|---|---|
committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2019-10-30 09:59:25 +0000 |
commit | 9813ff934f43d09ecbd60b9f73c624b04b7dcc77 (patch) | |
tree | 42d994c17c0d9172e9fe73884ea7b160a3f20038 /xlators/cluster | |
parent | ae6e11982fb7b6e21e2477dae2cecd9f89f50dfc (diff) |
cluster/afr: Take a copy of xattr-req
Afr adds its own xattrs to the req, so it should take a copy of the
dictionary to prevent parent xlator re-using the modified xattr-req
to another subvolume
fixes: bz#1765155
Change-Id: I268e2dbd1b12323135d369e90a22a8bdde2cf7c2
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Diffstat (limited to 'xlators/cluster')
-rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 951d8e7c81e..4b22af7cb3f 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -3274,10 +3274,15 @@ afr_discover(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req) local->inode = inode_ref(loc->inode); - if (xattr_req) + if (xattr_req) { /* If xattr_req was null, afr_lookup_xattr_req_prepare() will allocate one for us */ - local->xattr_req = dict_ref(xattr_req); + local->xattr_req = dict_copy_with_ref(xattr_req, NULL); + if (!local->xattr_req) { + op_errno = ENOMEM; + goto out; + } + } if (gf_uuid_is_null(loc->inode->gfid)) { afr_discover_do(frame, this, 0); |