Subject: Re: VONWORKLST problems with cached ubc mappings
To: None <email@example.com>
From: YAMAMOTO Takashi <firstname.lastname@example.org>
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.)