Re: panic: sbflush_locked

From: Robert Watson <rwatson_at_freebsd.org>
Date: Wed, 22 Dec 2004 08:55:31 +0000 (GMT)
On Mon, 20 Dec 2004, Alan Cox wrote:

> > I haven't seen this in a very long time, but I've definitely tried to
> > track it down before with zero luck.
> 
> With the attached change, I've had no more crashes. 
> 
> I speculate uipc_send() is missing needed synchronization on so_snd. 
> Robert, can you verify the patch? 

Sorry for the delay in responding to your original post; I'm still
catching up with e-mail from my trip to Bangladesh.  I actually had
similar changes to this in the netperf branch at one point, but think I
removed them due to concerns about lock order.  However, this change is
careful to acquire the send lock before the receive lock, so I think
shouldn't present a problem from that perspective.  Please go ahead and
commit, perhaps with a 2 week MFC time? 

Thanks!

Robert N M Watson             FreeBSD Core Team, TrustedBSD Projects
robert_at_fledge.watson.org      Principal Research Scientist, McAfee Research



> Index: kern/uipc_usrreq.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/kern/uipc_usrreq.c,v
> retrieving revision 1.143
> diff -u -r1.143 uipc_usrreq.c
> --- kern/uipc_usrreq.c	1 Dec 2004 09:22:26 -0000	1.143
> +++ kern/uipc_usrreq.c	19 Dec 2004 03:22:50 -0000
> _at__at_ -452,7 +452,9 _at__at_
>  			}
>  		}
>  
> +		SOCKBUF_LOCK(&so->so_snd);
>  		if (so->so_snd.sb_state & SBS_CANTSENDMORE) {
> +			SOCKBUF_UNLOCK(&so->so_snd);
>  			error = EPIPE;
>  			break;
>  		}
> _at__at_ -478,6 +480,7 _at__at_
>  		    (so2->so_rcv.sb_cc - unp->unp_conn->unp_cc);
>  		(void)chgsbsize(so->so_cred->cr_uidinfo, &so->so_snd.sb_hiwat,
>  		    newhiwat, RLIM_INFINITY);
> +		SOCKBUF_UNLOCK(&so->so_snd);
>  		unp->unp_conn->unp_cc = so2->so_rcv.sb_cc;
>  		sorwakeup_locked(so2);
>  		m = NULL;
Received on Wed Dec 22 2004 - 07:58:41 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:25 UTC