diff options
| author | Ravishankar N <ravishankar@redhat.com> | 2018-01-30 20:59:23 +0530 | 
|---|---|---|
| committer | Amar Tumballi <amarts@redhat.com> | 2018-01-31 13:59:13 +0000 | 
| commit | 440a048f24b006c80af3d7bcd0a1f13fe3459d87 (patch) | |
| tree | d803fff4b424e8026face2b0dfec86ea75589509 | |
| parent | 85f1d5444735c34ec8da23dc014ed99b6706577c (diff) | |
afr: capture the correct errno in post-op quorum check
If the post-op phase of txn did not meet quorm checks, use that errno to
unwind the FOP rather than blindly setting ENOTCONN.
Change-Id: I0cb0c8771ec75a45f9a25ad4cd8601103deddf0c
BUG: 1506140
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
| -rw-r--r-- | xlators/cluster/afr/src/afr-transaction.c | 16 | 
1 files changed, 8 insertions, 8 deletions
diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c index b72afc80947..3e5326b7753 100644 --- a/xlators/cluster/afr/src/afr-transaction.c +++ b/xlators/cluster/afr/src/afr-transaction.c @@ -534,8 +534,8 @@ afr_lock_server_count (afr_private_t *priv, afr_transaction_type type)  /* {{{ pending */ -gf_boolean_t -afr_post_op_has_quorum (afr_local_t *local, xlator_t *this) +void +afr_handle_post_op_quorum (afr_local_t *local, xlator_t *this)  {          afr_private_t *priv = NULL;          int i = 0; @@ -551,10 +551,13 @@ afr_post_op_has_quorum (afr_local_t *local, xlator_t *this)          }          if (afr_has_quorum (post_op_children, this)) { -                return _gf_true; +                return;          } -        return _gf_false; +        local->op_ret = -1; +        /*local->op_errno is already captured in post-op callback.*/ + +        return;  }  int @@ -569,10 +572,7 @@ afr_changelog_post_op_done (call_frame_t *frame, xlator_t *this)          int_lock = &local->internal_lock;          /* Fail the FOP if post-op did not succeed on quorum no. of bricks. */ -        if (!afr_post_op_has_quorum (local, this)) { -                local->op_ret = -1; -                local->op_errno = ENOTCONN; -        } +        afr_handle_post_op_quorum (local, this);  	if (local->transaction.resume_stub) {  		call_resume (local->transaction.resume_stub);  | 
