panic: sbflush_locked
Robert Watson
rwatson at freebsd.org
Wed Dec 22 00:58:41 PST 2004
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
> @@ -452,7 +452,9 @@
> }
> }
>
> + SOCKBUF_LOCK(&so->so_snd);
> if (so->so_snd.sb_state & SBS_CANTSENDMORE) {
> + SOCKBUF_UNLOCK(&so->so_snd);
> error = EPIPE;
> break;
> }
> @@ -478,6 +480,7 @@
> (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;
More information about the freebsd-current
mailing list