svn commit: r361287 - in head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys
Mark Johnston
markj at freebsd.org
Wed May 20 18:30:53 UTC 2020
On Wed, May 20, 2020 at 06:29:23PM +0000, Mark Johnston wrote:
> Author: markj
> Date: Wed May 20 18:29:23 2020
> New Revision: 361287
> URL: https://svnweb.freebsd.org/changeset/base/361287
>
> Log:
> Don't block on the range lock in zfs_getpages().
>
> After r358443 the vnode object lock no longer synchronizes concurrent
> zfs_getpages() and zfs_write() (which must update vnode pages to
> maintain coherence). This created a potential deadlock between ZFS
> range locks and VM page busy locks: a fault on a mapped file will cause
> the fault page to be busied, after which zfs_getpages() locks a range
> around the file offset in order to map adjacent, resident pages;
> zfs_write() locks the range first, and then must busy vnode pages when
> synchronizing.
>
> Solve this by adding a non-blocking mode for ZFS range locks, and using
> it in zfs_getpages(). If zfs_getpages() fails to acquire the range
> lock, only the fault page will be populated.
I will work on getting this submitted to OpenZFS.
More information about the svn-src-all
mailing list