Re: Panic in propagate_priority() [5.3-BETA2]

From: Robert Watson <rwatson_at_freebsd.org>
Date: Thu, 2 Sep 2004 16:18:05 -0400 (EDT)
On Thu, 2 Sep 2004, Patrick Guelat wrote:

> On Thu, 2 Sep 2004, Robert Watson wrote:
> 
> >> exclusive sleep mutex rip r=1 (0xc079e70c) locked _at_ /usr/src53/sys/netinet6/raw_ip.c:255
> >
> > Ah, indeed, there's an incorrect "lock" instead of "unlock" there.  Could
> > you try the attached patch:
> 
> Thanks. Your patch works like a dream. I looked a that line a dozen
> times and didn't realize it was a lock instead of an unlock ;-)

Great -- I've merged to HEAD and will merge to RELENG_5 in a couple of
days once it has settled.

> I was just wondering why you're using the same lock in IPv4 and IPv6 and
> if this probably may cause problems in ipv6 over ipv4 situations.

This was a design choice I inherited from those working on the network
stack locking previously, but it actually makes some amount of sense: the
IPv4 and IPv6 implementations share a lot of infrastructure, including
protocol control blocks lists for most protocols.  I.e., UDP, TCP, et al. 
This includes raw IP sockets.  Since the same structures are use, the same
locks must also be used.  I agree there are potential layering issues,
especially relating to IPv4/IPv6 tunneling, which may already be addressed
by queued dispatch (i.e., asynchronous processing of the tunneled packet
to avoid both lock orders and general recursion problems).

Thanks!

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



> 
> Tested on RELENG_5
> 
> -Patrick
> 
> >
> > Index: raw_ip6.c
> > ===================================================================
> > RCS file: /data/fbsd-cvs/ncvs/src/sys/netinet6/raw_ip6.c,v
> > retrieving revision 1.45
> > diff -u -r1.45 raw_ip6.c
> > --- raw_ip6.c	12 Aug 2004 18:31:36 -0000	1.45
> > +++ raw_ip6.c	2 Sep 2004 12:55:19 -0000
> > _at__at_ -252,7 +252,7 _at__at_
> > 		}
> > 		ip6stat.ip6s_delivered--;
> > 	}
> > -	INP_INFO_RLOCK(&ripcbinfo);
> > +	INP_INFO_RUNLOCK(&ripcbinfo);
> > 	return IPPROTO_DONE;
> > }
> --
> Patrick Guélat, ImproWare AG Network Services, CH-4133 Pratteln
> Mail: Patrick.Guelat_at_imp.ch - Phone: +41 61 826 93 00 (ext: 13)
Received on Thu Sep 02 2004 - 18:20:45 UTC

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