cvs commit: src/sys/kern vfs_subr.c

Don Lewis truckman at FreeBSD.org
Wed Aug 10 16:56:58 GMT 2005


On 10 Aug, Kris Kennaway wrote:
> On Wed, Aug 10, 2005 at 11:46:03AM +0000, Alexander Kabaev wrote:
>> kan         2005-08-10 11:46:03 UTC
>> 
>>   FreeBSD src repository
>> 
>>   Modified files:
>>     sys/kern             vfs_subr.c 
>>   Log:
>>   Do not drop the vnode interlock if vdropl is called on already doomed vnode.
>>   vdropl callers expect it to return with interlock still being held.
> 
> Does this fix panics some of us have been reporting?

It should get rid if the "lock (sleep mutex) vnode interlock not locked"
panic, but there is still a race condition in vlrureclaim(), which tests
this condition

                if ((vp->v_iflag & VI_DOOMED) != 0 || vp->v_usecount ||
                    !LIST_EMPTY(&(vp)->v_cache_src) || (vp->v_object != NULL &&
                    vp->v_object->resident_page_count > trigger)) {

before obtaining the vnode lock.  When vlrureclaim() calls VOP_LOCK() to
obtain the vnode lock, VOP_LOCK() drops the vnode interlock before it
obtains the vnode lock, so it is possible for these conditions to change
while waiting for the vnode lock or before the vnode interlock is
grabbed again.  I suspect that losing this race could have other
implications ...



More information about the cvs-all mailing list