diff options
Diffstat (limited to 'xlators/cluster/afr/src')
| -rw-r--r-- | xlators/cluster/afr/src/afr-inode-write.c | 8 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-transaction.c | 16 | 
2 files changed, 12 insertions, 12 deletions
diff --git a/xlators/cluster/afr/src/afr-inode-write.c b/xlators/cluster/afr/src/afr-inode-write.c index 4206ef2f111..084a78ecf47 100644 --- a/xlators/cluster/afr/src/afr-inode-write.c +++ b/xlators/cluster/afr/src/afr-inode-write.c @@ -417,7 +417,6 @@ afr_do_writev (call_frame_t *frame, xlator_t *this)  {          call_frame_t    *transaction_frame = NULL;          afr_local_t     *local             = NULL; -        afr_private_t   *priv              = NULL;          int             ret   = -1;          int             op_errno = ENOMEM; @@ -426,7 +425,6 @@ afr_do_writev (call_frame_t *frame, xlator_t *this)                  goto out;          local = frame->local; -        priv = this->private;          transaction_frame->local = local;  	frame->local = NULL; @@ -456,12 +454,6 @@ afr_do_writev (call_frame_t *frame, xlator_t *this)                  local->transaction.start   = local->cont.writev.offset;                  local->transaction.len     = iov_length (local->cont.writev.vector,                                                           local->cont.writev.count); - -                /*Lock entire file to avoid network split brains.*/ -                if (priv->arbiter_count == 1) { -                        local->transaction.start   = 0; -                        local->transaction.len     = 0; -                }          }          ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION); diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c index 4c85a4b0d03..59d03e3ed9e 100644 --- a/xlators/cluster/afr/src/afr-transaction.c +++ b/xlators/cluster/afr/src/afr-transaction.c @@ -1356,16 +1356,24 @@ afr_post_lower_unlock_cbk (call_frame_t *frame, xlator_t *this)  int -afr_set_transaction_flock (afr_local_t *local) +afr_set_transaction_flock (xlator_t *this, afr_local_t *local)  {          afr_internal_lock_t *int_lock = NULL;          afr_inodelk_t       *inodelk  = NULL; +        afr_private_t       *priv     = NULL;          int_lock = &local->internal_lock;          inodelk = afr_get_inodelk (int_lock, int_lock->domain); +        priv = this->private; -        inodelk->flock.l_len   = local->transaction.len; -        inodelk->flock.l_start = local->transaction.start; +        if (priv->arbiter_count) { +                /*Lock entire file to avoid network split brains.*/ +                inodelk->flock.l_len   = 0; +                inodelk->flock.l_start = 0; +        } else { +                inodelk->flock.l_len   = local->transaction.len; +                inodelk->flock.l_start = local->transaction.start; +        }          inodelk->flock.l_type  = F_WRLCK;          return 0; @@ -1386,7 +1394,7 @@ afr_lock_rec (call_frame_t *frame, xlator_t *this)          switch (local->transaction.type) {          case AFR_DATA_TRANSACTION:          case AFR_METADATA_TRANSACTION: -                afr_set_transaction_flock (local); +                afr_set_transaction_flock (this, local);                  int_lock->lock_cbk = afr_post_nonblocking_inodelk_cbk;  | 
