CFR: fifo_open()/fifo_close() patch
Bruce Evans
bde at zeta.org.au
Sat May 17 02:41:20 PDT 2003
On Sat, 17 May 2003, Don Lewis wrote:
> On 17 May, Bruce Evans wrote:
> > My question is mainly: why do you want or need the extra complexity for
> > using the vnode interlock here?
>
> I want to use the vnode interlock so that I can msleep() on it to avoid
> a race condition. If I rely on the vnode lock to protect fi_readers and
> fi_writers, another thread could sneak in, update them, and call
> wakeup() between the VOP_UNLOCK() call and the tsleep() call, causing
> the thread calling tsleep() to miss the wakeup().
I see.
I now think fifo_close() needs both the vnode lock and the interlock.
Its socantrcvmore() calls should be atomic with decrementing the
reader/writer counts to 0. I think locking them with the interlock
would work, but this depends too much on their internals (not sleeping).
Sorry, I deleted your original patch and don't remember exactly what it
does here.
NetBSD changed VOP_CLOSE() to "L L L" 4+ years ago.
Bruce
More information about the freebsd-current
mailing list