db93f9ed63
Convert filemon_lock and struct filemon* lock to sx(9), rather than a self-rolled reader-writer lock, and hold it for the entire time needed. At least filemon_lock_write() was not checking for active readers when it would successfully return with the write lock "held". This led to a race with reading entries from filemon_inuse as they were removed. This could be seen with QUEUE_MACRO_DEBUG enabled, causing -1 to be read as an entry rather than a valid struct filemon*. Fixing filemon_lock_write() to check readers was insufficient to fix the races. sx(9) was used as the lock could be held while taking proctree_lock and sleeping in fo_write. Sponsored by: EMC / Isilon Storage Division MFC after: 2 weeks |
||
---|---|---|
.. | ||
filemon_lock.c | ||
filemon_wrapper.c | ||
filemon.c | ||
filemon.h |