From ca6a3d1e396a65d25e54d331bef966178cd55375 Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Thu, 28 Mar 2013 11:29:41 +0530 Subject: cluster/afr: piggyback and fsync resume changes 1) pre_op_piggyback should always be decremented. 2) Move fsync resume to just after post_op. 3) fsync stub should be created from afr's local not from the final response. Change-Id: I220bb532eb03bea584292f4dd2e816ad0c3e0cf7 BUG: 927146 Signed-off-by: Pranith Kumar K Reviewed-on: http://review.gluster.org/4741 Tested-by: Gluster Build System Reviewed-by: Anand Avati --- xlators/cluster/afr/src/afr-transaction.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'xlators/cluster/afr/src/afr-transaction.c') diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c index f632a2b701a..e54f9c2cbec 100644 --- a/xlators/cluster/afr/src/afr-transaction.c +++ b/xlators/cluster/afr/src/afr-transaction.c @@ -398,6 +398,11 @@ afr_changelog_post_op_cbk (call_frame_t *frame, void *cookie, xlator_t *this, UNLOCK (&frame->lock); if (call_count == 0) { + if (local->transaction.resume_stub) { + call_resume (local->transaction.resume_stub); + local->transaction.resume_stub = NULL; + } + if (afr_lock_server_count (priv, local->transaction.type) == 0) { local->transaction.done (frame, this); } else { @@ -1370,12 +1375,6 @@ is_piggyback_post_op (call_frame_t *frame, fd_t *fd) local = frame->local; fdctx = afr_fd_ctx_get (fd, frame->this); - if (!afr_txn_nothing_failed (frame, frame->this)) - /* something failed in this transaction, - we will be performing a hard post-op - */ - return _gf_false; - LOCK(&fd->lock); { piggyback = _gf_true; @@ -1398,7 +1397,14 @@ is_piggyback_post_op (call_frame_t *frame, fd_t *fd) } UNLOCK(&fd->lock); - return piggyback; + if (!afr_txn_nothing_failed (frame, frame->this)) { + /* something failed in this transaction, + we will be performing a hard post-op + */ + return _gf_false; + } + + return piggyback; } @@ -1619,7 +1625,7 @@ unlock: local = prev_frame->local; local->transaction.resume_stub = stub; afr_changelog_post_op_safe (prev_frame, this); - } else { + } else if (stub) { call_resume (stub); } } -- cgit