Subject: Re: VONWORKLST problems with cached ubc mappings
To: None <dbj@netbsd.org>
From: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
List: tech-kern
Date: 09/28/2006 13:29:38
> A vnode gets written with msdofs_write, this faults pages in to
> a ubc_alloc mapping and the mapping gets cached.  The fault marks
> the vnode VONWORKLST.  When these pages are eventually cleaned, the
> VONWORKLST flag gets appropriately cleared.
> 
> Later, a second msdosfs_write to the same pages calls ubc_alloc
> and gets the previously cached mapping.  Since it finds the
> cached mapping and UBC_FAULTBUSY is not used, there is no
> getpages call, and the pages are dirtied without the vnode
> being tagged with VONWORKLST.
> 
> Now the vnode has dirty pages without being marked VONWORKLST.
> If it does eventually get flushed, this results in the DEBUG panic.

genfs_putpages makes pages read-only by calling pmap_page_protect
so that further attempts of making pages dirty, including ubc, will
involve getpages.  (at least it was my intention.)

YAMAMOTO Takashi