diff options
author | Jeff Roberson <jeff@FreeBSD.org> | 2020-02-28 20:34:30 +0000 |
---|---|---|
committer | Jeff Roberson <jeff@FreeBSD.org> | 2020-02-28 20:34:30 +0000 |
commit | 7aaf252c964f1cecd008adaf07ea0b8659805721 (patch) | |
tree | 6b5f3ddd6614e2430a0540196af560ca74b04d20 /sys/kern/vfs_bio.c | |
parent | f72eaaeb039badaac33138e7bf2ff0faca4ee809 (diff) | |
download | src-7aaf252c964f1cecd008adaf07ea0b8659805721.tar.gz src-7aaf252c964f1cecd008adaf07ea0b8659805721.zip |
Convert a few triviail consumers to the new unlocked grab API.
Reviewed by: kib, markj
Differential Revision: https://reviews.freebsd.org/D23847
Notes
Notes:
svn path=/head/; revision=358447
Diffstat (limited to 'sys/kern/vfs_bio.c')
-rw-r--r-- | sys/kern/vfs_bio.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index a4da72d208fe..aeff2b5b259f 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -3046,13 +3046,11 @@ vfs_vmio_extend(struct buf *bp, int desiredpages, int size) * deadlocks once allocbuf() is called after * pages are vfs_busy_pages(). */ - VM_OBJECT_WLOCK(obj); - (void)vm_page_grab_pages(obj, + (void)vm_page_grab_pages_unlocked(obj, OFF_TO_IDX(bp->b_offset) + bp->b_npages, VM_ALLOC_SYSTEM | VM_ALLOC_IGN_SBUSY | VM_ALLOC_NOBUSY | VM_ALLOC_WIRED, &bp->b_pages[bp->b_npages], desiredpages - bp->b_npages); - VM_OBJECT_WUNLOCK(obj); bp->b_npages = desiredpages; } @@ -5237,11 +5235,13 @@ next_page:; } end_pages: - VM_OBJECT_WLOCK(object); redo = false; for (i = 0; i < count; i++) { - vm_page_sunbusy(ma[i]); - ma[i] = vm_page_grab(object, ma[i]->pindex, VM_ALLOC_NORMAL); + if (vm_page_busy_tryupgrade(ma[i]) == 0) { + vm_page_sunbusy(ma[i]); + ma[i] = vm_page_grab_unlocked(object, ma[i]->pindex, + VM_ALLOC_NORMAL); + } /* * Since the pages were only sbusy while neither the @@ -5259,7 +5259,6 @@ end_pages: if (!vm_page_all_valid(ma[i])) redo = true; } - VM_OBJECT_WUNLOCK(object); if (redo && error == 0) goto again; return (error != 0 ? VM_PAGER_ERROR : VM_PAGER_OK); |