diff options
Diffstat (limited to 'xlators/cluster/afr')
-rw-r--r-- | xlators/cluster/afr/src/afr-transaction.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c index 908c6bea0b7..2bb4e827c76 100644 --- a/xlators/cluster/afr/src/afr-transaction.c +++ b/xlators/cluster/afr/src/afr-transaction.c @@ -537,10 +537,14 @@ afr_handle_symmetric_errors (call_frame_t *frame, xlator_t *this) } i_errno = local->replies[i].op_errno; - if (i_errno == ENOTCONN) { + if (i_errno == ENOTCONN || i_errno == EDQUOT || + i_errno == ENOSPC) { /* ENOTCONN is not a symmetric error. We do not know if the operation was performed on the backend or not. + * Before reaching EDQUOT and ENOSPC, each brick would + * have written some amount of data, hence this is not + * symmetric error. */ matching_errors = _gf_false; break; @@ -719,7 +723,7 @@ afr_changelog_post_op_now (call_frame_t *frame, xlator_t *this) else need_undirty = _gf_true; - if (local->op_ret < 0) { + if (local->op_ret < 0 && !nothing_failed) { afr_changelog_post_op_done (frame, this); goto out; } |