[Drbd-dev] Panic in _drbd_send_page() again.

Graham, Simon Simon.Graham at stratus.com
Fri May 4 21:02:45 CEST 2007


> so what you suggest is:
> 
> Index: drbd_req.c
> ===================================================================
> --- drbd_req.c	(revision 2864)
> +++ drbd_req.c	(working copy)
> @@ -255,6 +255,16 @@
>  	print_rq_state(req, "_req_may_be_done");
>  	MUST_HOLD(&mdev->req_lock)
> 
> +	/* we must not complete the master bio, while it is
> +	 *	still being processed by _drbd_send_zc_bio
> (drbd_send_dblock)
> +	 *	not yet acknowledged by the peer
> +	 *	not yet completed by the local io subsystem
> +	 * these flags may get cleared in any order by
> +	 *	the worker,
> +	 *	the receiver,
> +	 *	the bio_endio completion callbacks.
> +	 */
> +	if (s & RQ_NET_QUEUED) return;
>  	if (s & RQ_NET_PENDING) return;
>  	if (s & RQ_LOCAL_PENDING) return;
> 

I think this is correct -- in fact, I _think_ you could probably do away
with the RQ_NET_SENT flag (since this is, I think, the same as
!RQ_NET_QUEUED) which would be good (always good to remove extra
flags!).

In addition, there is code in req_mod right now that checks RQ_NET_SENT
before calling req_may_be_done -- this is no lomger needed since
req_may_be_done does the check. I've attached a completely untested
proposed patch that does this in addition to the change above... let me
know what you think...

Simon

-------------- next part --------------
A non-text attachment was scrubbed...
Name: net-queued.patch
Type: application/octet-stream
Size: 4038 bytes
Desc: net-queued.patch
Url : http://lists.linbit.com/pipermail/drbd-dev/attachments/20070504/2dacee58/net-queued.obj


More information about the drbd-dev mailing list