Index: drbd_worker.c =================================================================== --- drbd_worker.c (revision 2373) +++ drbd_worker.c (working copy) @@ -564,12 +564,10 @@ ok = drbd_send_dblock(mdev,req); if (ok) { - spin_lock_irq(&mdev->req_lock); - req->rq_status |= RQ_DRBD_ON_WIRE; - spin_unlock_irq(&mdev->req_lock); - inc_ap_pending(mdev); + drbd_end_req(req,RQ_DRBD_ON_WIRE,1,drbd_req_get_sector(req)); + if(mdev->net_conf->wire_protocol == DRBD_PROT_A) { dec_ap_pending(mdev); drbd_end_req(req, RQ_DRBD_SENT, 1, Index: drbd_req.c =================================================================== --- drbd_req.c (revision 2373) +++ drbd_req.c (working copy) @@ -341,7 +341,7 @@ if (!local) req->rq_status |= RQ_DRBD_LOCAL; if (!remote) - req->rq_status |= RQ_DRBD_SENT; + req->rq_status |= RQ_DRBD_SENT | RQ_DRBD_ON_WIRE; /* we need to plug ALWAYS since we possibly need to kick lo_dev */ drbd_plug_device(mdev); Index: drbd_int.h =================================================================== --- drbd_int.h (revision 2373) +++ drbd_int.h (working copy) @@ -233,9 +233,9 @@ #define RQ_DRBD_NOTHING 0x0001 #define RQ_DRBD_SENT 0x0010 // We got an ack #define RQ_DRBD_LOCAL 0x0020 // We wrote it to the local disk -#define RQ_DRBD_DONE 0x0030 // We are done ;) #define RQ_DRBD_IN_TL 0x0040 // Set when it is in the TL #define RQ_DRBD_ON_WIRE 0x0080 // Set as soon as it is on the socket... +#define RQ_DRBD_DONE ( RQ_DRBD_SENT + RQ_DRBD_LOCAL + RQ_DRBD_ON_WIRE ) /* drbd_meta-data.c (still in drbd_main.c) */ #define DRBD_MD_MAGIC (DRBD_MAGIC+4) // 4th incarnation of the disk layout.