Date: Sat, 31 May 2003 23:24:32 -0700 (PDT) From: Don Lewis <truckman@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/fs/fifofs fifo_vnops.c Message-ID: <200306010624.h516OWX5097169@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
truckman 2003/05/31 23:24:32 PDT
FreeBSD src repository
Modified files:
sys/fs/fifofs fifo_vnops.c
Log:
Fix up locking problems in fifo_open() and fifo_close():
Sleep on the vnode interlock while waiting for another
caller to increment fi_readers or fi_writers. Hold the
vnode interlock while incrementing fi_readers or fi_writers
to prevent a wakeup from being missed.
Only access fi_readers and fi_writers while holding the vnode
lock. Previously fifo_close() decremented their values without
holding a lock.
Move resource deallocation from fifo_close() to fifo_inactive(),
which allows the VOP_CLOSE() call in the error return path in
fifo_open() to be removed. Fifo_open() was calling VOP_CLOSE()
with the vnode lock held, in violation the current vnode locking
API. Also the way fifo_close() used vrefcnt() to decide whether
to deallocate resources was bogus according to comments in the
vrefcnt() implementation.
Reviewed by: bde
Revision Changes Path
1.87 +73 -25 src/sys/fs/fifofs/fifo_vnops.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200306010624.h516OWX5097169>
