Date: Thu, 14 Aug 1997 23:38:23 +0200 From: Poul-Henning Kamp <phk@critter.dk.tfs.com> To: Steve Passe <smp@csn.net> Cc: Poul-Henning Kamp <phk@dk.tfs.com>, smp@freebsd.org Subject: Re: bug ? Message-ID: <3867.871594703@critter.dk.tfs.com> In-Reply-To: Your message of "Thu, 14 Aug 1997 13:44:34 MDT." <199708141944.NAA02468@Ilsa.StevesCafe.com>
index | next in thread | previous in thread | raw e-mail
>First, I haven't spent any time reading this section of code bwfore today,
>so take anything I say as 'probably'. Second, I once was of the impression
>that the lite2 lockmanager code was well tested, but I now have my doubts
>about that so we need to look at everything in there with some suspicion.
Ohh, sorry, I mistakenly thought that PAUSE was one of your additions.
>What "break" breaks out of obviosly depends on where the macro is used, but
>to use one example, look at:
>
>#define ACQUIRE(lkp, error, extflags, wanted) \
> PAUSE(lkp, wanted); \
> for (error = 0; wanted; ) { \
> (lkp)->lk_waitcount++; \
> simple_unlock(&(lkp)->lk_interlock); \
> error = tsleep((void *)lkp, (lkp)->lk_prio, \
> (lkp)->lk_wmesg, (lkp)->lk_timo); \
> simple_lock(&(lkp)->lk_interlock); \
> (lkp)->lk_waitcount--; \
> if (error) \
> break; \
> if ((extflags) & LK_SLEEPFAIL) { \
> error = ENOLCK; \
> break; \
> } \
> }
>
>-
>here the 'break' bypasses the code which goes on to sleep on the lock.
Worse, it breaks out of the switch statement down in lockmgr() :-(
>Right now the kernel panics almost immediately if the lockmanager is
>turned on in the SMP kernel.
For a good reason I think.
Well, flag that construct, and look into it when you get there, I just
happened to look at it by accident.
Poul-Henning
--
Poul-Henning Kamp | phk@FreeBSD.ORG FreeBSD Core-team.
http://www.freebsd.org/~phk | phk@login.dknet.dk Private mailbox.
whois: [PHK] | phk@tfs.com TRW Financial Systems, Inc.
Power and ignorance is a disgusting cocktail.
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3867.871594703>
