|author||Mark Johnston <markj@FreeBSD.org>||2020-05-20 18:29:23 +0000|
|committer||Mark Johnston <markj@FreeBSD.org>||2020-05-20 18:29:23 +0000|
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. Reported by: bdrewery Reviewed by: avg Tested by: pho Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D24839
Notes: svn path=/head/; revision=361287
Diffstat (limited to 'share')
0 files changed, 0 insertions, 0 deletions