diff options
| -rw-r--r-- | xlators/features/shard/src/shard.c | 33 | 
1 files changed, 17 insertions, 16 deletions
diff --git a/xlators/features/shard/src/shard.c b/xlators/features/shard/src/shard.c index 35c9d1d9d45..ed02f6a8c60 100644 --- a/xlators/features/shard/src/shard.c +++ b/xlators/features/shard/src/shard.c @@ -3360,14 +3360,11 @@ shard_post_update_size_writev_handler (call_frame_t *frame, xlator_t *this)          if (local->op_ret < 0) {                  SHARD_STACK_UNWIND (writev, frame, local->op_ret,                                      local->op_errno, NULL, NULL, NULL); -                return 0; +        } else { +                SHARD_STACK_UNWIND (writev, frame, local->written_size, +                                    local->op_errno, &local->prebuf, +                                    &local->postbuf, local->xattr_rsp);          } - -        local->postbuf.ia_size += (local->delta_size + local->hole_size); -        local->postbuf.ia_blocks += local->delta_blocks; - -        SHARD_STACK_UNWIND (writev, frame, local->written_size, local->op_errno, -                            &local->prebuf, &local->postbuf, local->xattr_rsp);          return 0;  } @@ -3423,16 +3420,20 @@ shard_writev_do_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          local = frame->local; -        if (op_ret < 0) { -                local->op_ret = op_ret; -                local->op_errno = op_errno; -        } else { -                local->written_size += op_ret; -                local->delta_blocks += (postbuf->ia_blocks - prebuf->ia_blocks); -                local->delta_size += (postbuf->ia_size - prebuf->ia_size); -                shard_inode_ctx_set (local->fd->inode, this, postbuf, 0, -                                     SHARD_MASK_TIMES); +        LOCK (&frame->lock); +        { +                if (op_ret < 0) { +                        local->op_ret = op_ret; +                        local->op_errno = op_errno; +                } else { +                        local->written_size += op_ret; +                        local->delta_blocks += (postbuf->ia_blocks - prebuf->ia_blocks); +                        local->delta_size += (postbuf->ia_size - prebuf->ia_size); +                        shard_inode_ctx_set (local->fd->inode, this, postbuf, 0, +                                             SHARD_MASK_TIMES); +                }          } +        UNLOCK (&frame->lock);          if (anon_fd)                  fd_unref (anon_fd);  | 
