d1681e
From 9b0122cbe61047c9591de447bb19a6028b69861c Mon Sep 17 00:00:00 2001
d1681e
From: Ravishankar N <ravishankar@redhat.com>
d1681e
Date: Tue, 30 Jan 2018 20:59:23 +0530
d1681e
Subject: [PATCH 154/180] afr: capture the correct errno in post-op quorum
d1681e
 check
d1681e
d1681e
Backport of https://review.gluster.org/#/c/19366/
d1681e
d1681e
If the post-op phase of txn did not meet quorm checks, use that errno to
d1681e
unwind the FOP rather than blindly setting ENOTCONN.
d1681e
d1681e
Change-Id: I0cb0c8771ec75a45f9a25ad4cd8601103deddf0c
d1681e
BUG: 1384983
d1681e
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
d1681e
Reviewed-on: https://code.engineering.redhat.com/gerrit/129221
d1681e
Tested-by: RHGS Build Bot <nigelb@redhat.com>
d1681e
---
d1681e
 xlators/cluster/afr/src/afr-transaction.c | 16 ++++++++--------
d1681e
 1 file changed, 8 insertions(+), 8 deletions(-)
d1681e
d1681e
diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c
d1681e
index 18d2ded..19740e1 100644
d1681e
--- a/xlators/cluster/afr/src/afr-transaction.c
d1681e
+++ b/xlators/cluster/afr/src/afr-transaction.c
d1681e
@@ -534,8 +534,8 @@ afr_lock_server_count (afr_private_t *priv, afr_transaction_type type)
d1681e
 /* {{{ pending */
d1681e
 
d1681e
 
d1681e
-gf_boolean_t
d1681e
-afr_post_op_has_quorum (afr_local_t *local, xlator_t *this)
d1681e
+void
d1681e
+afr_handle_post_op_quorum (afr_local_t *local, xlator_t *this)
d1681e
 {
d1681e
         afr_private_t *priv = NULL;
d1681e
         int i = 0;
d1681e
@@ -551,10 +551,13 @@ afr_post_op_has_quorum (afr_local_t *local, xlator_t *this)
d1681e
         }
d1681e
 
d1681e
         if (afr_has_quorum (post_op_children, this)) {
d1681e
-                return _gf_true;
d1681e
+                return;
d1681e
         }
d1681e
 
d1681e
-        return _gf_false;
d1681e
+        local->op_ret = -1;
d1681e
+        /*local->op_errno is already captured in post-op callback.*/
d1681e
+
d1681e
+        return;
d1681e
 }
d1681e
 
d1681e
 int
d1681e
@@ -569,10 +572,7 @@ afr_changelog_post_op_done (call_frame_t *frame, xlator_t *this)
d1681e
         int_lock = &local->internal_lock;
d1681e
 
d1681e
         /* Fail the FOP if post-op did not succeed on quorum no. of bricks. */
d1681e
-        if (!afr_post_op_has_quorum (local, this)) {
d1681e
-                local->op_ret = -1;
d1681e
-                local->op_errno = ENOTCONN;
d1681e
-        }
d1681e
+        afr_handle_post_op_quorum (local, this);
d1681e
 
d1681e
 	if (local->transaction.resume_stub) {
d1681e
 		call_resume (local->transaction.resume_stub);
d1681e
-- 
d1681e
1.8.3.1
d1681e