Locked up processes after upgrade to ZFS v15

Andriy Gapon avg at freebsd.org
Sun Oct 10 12:27:50 UTC 2010


on 10/10/2010 15:15 Kostik Belousov said the following:
> On Sun, Oct 10, 2010 at 12:47:50PM +0300, Andriy Gapon wrote:
>> Hm, I think that we actually shouldn't see a stack like that.
>> vm_fault sets VPO_BUSY on a page before calling vnode_pager_generic_getpages, so
>> the thread gets stuck forever in zfs mappedread.
>> It seems like the page that was seen as invalid in vm_fault becomes valid while
>> call flow reaches mappedread.
> The vnode is share-locked, and vm object lock is dropped and reacquired
> several times until control reaches zfs_mappedread. This indeed allows
> a window during which page might be read by other thread.

But wouldn't a page still stay protected by VPO_BUSY all that time?
I mean that the page shouldn't be read in and marked valid by other thread while
it's flagged with VPO_BUSY.  And, AFAICS, vm_fault has the page busy for the
whole duration.

> There are two possible routes to solve the issue:
> 1. Provide zfs-specific VOP_GETPAGES().
> 2. Use my vm6 patch. Sigh.


-- 
Andriy Gapon


More information about the freebsd-fs mailing list