diff options
author | N Balachandran <nbalacha@redhat.com> | 2018-08-21 20:57:52 +0530 |
---|---|---|
committer | Amar Tumballi <amarts@redhat.com> | 2018-08-23 06:49:11 +0000 |
commit | dad85784e74493158a186536d6c13183c83fc658 (patch) | |
tree | 7be19eab86ce347619c2774e1f0fd10ab18aa77d /xlators | |
parent | 9ec821f9e67848b3527f6b7dc776cb9ba440610b (diff) |
storage/posix: Increment trusted.pgfid in posix_mknod
The value of trusted.pgfid.xx was always set to 1
in posix_mknod. This is incorrect if posix_mknod
calls posix_create_link_if_gfid_exists.
Change-Id: Ibe87ca6f155846b9a7c7abbfb1eb8b6a99a5eb68
fixes: bz#1619720
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/storage/posix/src/posix-entry-ops.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/xlators/storage/posix/src/posix-entry-ops.c b/xlators/storage/posix/src/posix-entry-ops.c index acda68371d5..11ce9d69540 100644 --- a/xlators/storage/posix/src/posix-entry-ops.c +++ b/xlators/storage/posix/src/posix-entry-ops.c @@ -351,6 +351,7 @@ posix_mknod (call_frame_t *frame, xlator_t *this, gf_boolean_t linked = _gf_false; gf_loglevel_t level = GF_LOG_NONE; mode_t mode_bit = 0; + posix_inode_ctx_t *ctx = NULL; DECLARE_OLD_FS_ID_VAR; @@ -466,10 +467,20 @@ post_op: if (priv->update_pgfid_nlinks) { MAKE_PGFID_XATTR_KEY (pgfid_xattr_key, PGFID_XATTR_KEY_PREFIX, loc->pargfid); - nlink_samepgfid = 1; + op_ret = posix_inode_ctx_get_all (loc->inode, this, &ctx); + if (op_ret < 0) { + op_errno = ENOMEM; + goto out; + } - SET_PGFID_XATTR (real_path, pgfid_xattr_key, nlink_samepgfid, - XATTR_CREATE, op_ret, this, ignore); + pthread_mutex_lock (&ctx->pgfid_lock); + { + LINK_MODIFY_PGFID_XATTR (real_path, pgfid_xattr_key, + nlink_samepgfid, 0, op_ret, + this, unlock); + } +unlock: + pthread_mutex_unlock (&ctx->pgfid_lock); } if (priv->gfid2path) { @@ -477,7 +488,6 @@ post_op: loc->name); } -ignore: op_ret = posix_entry_create_xattr_set (this, real_path, xdata); if (op_ret) { if (errno != EEXIST) |