From a474ee80088835f6504a401841fc7eb9e9ed0d9e Mon Sep 17 00:00:00 2001 From: Simon P. Graham Date: Sun, 27 Jan 2008 10:31:34 -0500 Subject: [PATCH] Make sure barrier is sent AFTER last data block in epoch --- drbd/drbd_req.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff --git a/drbd/drbd_req.c b/drbd/drbd_req.c index 8a6f7af..ef39455 100644 --- a/drbd/drbd_req.c +++ b/drbd/drbd_req.c @@ -612,14 +612,19 @@ void _req_mod(drbd_request_t *req, drbd_req_event_t what, int error) req->epoch = mdev->newest_barrier->br_number; list_add_tail(&req->tl_requests,&mdev->newest_barrier->requests); - /* close the epoch, in case it outgrew the limit */ - if( ++mdev->newest_barrier->n_req >= mdev->net_conf->max_epoch_size ) - queue_barrier(mdev); + /* increment size of current epoch */ + mdev->newest_barrier->n_req++; + /* queue work item to send data */ D_ASSERT(req->rq_state & RQ_NET_PENDING); req->rq_state |= RQ_NET_QUEUED; req->w.cb = w_send_dblock; drbd_queue_work(&mdev->data.work, &req->w); + + /* close the epoch, in case it outgrew the limit */ + if( mdev->newest_barrier->n_req >= mdev->net_conf->max_epoch_size ) + queue_barrier(mdev); + break; /* FIXME -- 1.5.4-rc2.GIT