diff options
Diffstat (limited to 'xlators/cluster/afr/src/afr-inode-write.c')
| -rw-r--r-- | xlators/cluster/afr/src/afr-inode-write.c | 26 | 
1 files changed, 24 insertions, 2 deletions
diff --git a/xlators/cluster/afr/src/afr-inode-write.c b/xlators/cluster/afr/src/afr-inode-write.c index 9a9ef2e90a5..ed1014ce154 100644 --- a/xlators/cluster/afr/src/afr-inode-write.c +++ b/xlators/cluster/afr/src/afr-inode-write.c @@ -303,6 +303,7 @@ afr_inode_write_fill (call_frame_t *frame, xlator_t *this, int child_index,          afr_local_t *local = frame->local;          uint32_t open_fd_count = 0;          uint32_t write_is_append = 0; +        int32_t num_inodelks = 0;          LOCK (&frame->lock);          { @@ -321,10 +322,19 @@ afr_inode_write_fill (call_frame_t *frame, xlator_t *this, int child_index,                                         &open_fd_count);                  if (ret < 0)                          goto unlock; -		if (open_fd_count > local->open_fd_count) { +                if (open_fd_count > local->open_fd_count) {                          local->open_fd_count = open_fd_count;                          local->update_open_fd_count = _gf_true; -		} +                } + +                ret = dict_get_int32(xdata, GLUSTERFS_INODELK_COUNT, +                                     &num_inodelks); +                if (ret < 0) +                        goto unlock; +                if (num_inodelks > local->num_inodelks) { +                        local->num_inodelks = num_inodelks; +                        local->update_num_inodelks = _gf_true; +                }          }  unlock:          UNLOCK (&frame->lock); @@ -334,6 +344,7 @@ void  afr_process_post_writev (call_frame_t *frame, xlator_t *this)  {          afr_local_t     *local = NULL; +        afr_lock_t *lock = NULL;          local = frame->local; @@ -352,6 +363,11 @@ afr_process_post_writev (call_frame_t *frame, xlator_t *this)          if (local->update_open_fd_count)                  local->inode_ctx->open_fd_count = local->open_fd_count; +        if (local->update_num_inodelks && +                local->transaction.type == AFR_DATA_TRANSACTION) { +                lock = &local->inode_ctx->lock[local->transaction.type]; +                lock->num_inodelks = local->num_inodelks; +        }  } @@ -537,6 +553,12 @@ afr_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,                  goto out;          } +        if (dict_set_str(local->xdata_req, GLUSTERFS_INODELK_DOM_COUNT, +                         this->name)) { +                op_errno = ENOMEM; +                goto out; +        } +  	if (dict_set_uint32 (local->xdata_req, GLUSTERFS_WRITE_IS_APPEND, 4)) {  		op_errno = ENOMEM;  		goto out;  | 
