svn commit: r322406 - head/sys/kern
Mark Johnston
markj at FreeBSD.org
Fri Aug 11 16:32:26 UTC 2017
Author: markj
Date: Fri Aug 11 16:32:24 2017
New Revision: 322406
URL: https://svnweb.freebsd.org/changeset/base/322406
Log:
Have sendfile_swapin() use vm_page_grab_pages().
Reviewed by: alc, kib
MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D11942
Modified:
head/sys/kern/kern_sendfile.c
Modified: head/sys/kern/kern_sendfile.c
==============================================================================
--- head/sys/kern/kern_sendfile.c Fri Aug 11 16:29:22 2017 (r322405)
+++ head/sys/kern/kern_sendfile.c Fri Aug 11 16:32:24 2017 (r322406)
@@ -309,7 +309,7 @@ sendfile_swapin(vm_object_t obj, struct sf_io *sfio, o
int npages, int rhpages, int flags)
{
vm_page_t *pa = sfio->pa;
- int nios;
+ int grabbed, nios;
nios = 0;
flags = (flags & SF_NODISKIO) ? VM_ALLOC_NOWAIT : 0;
@@ -319,14 +319,14 @@ sendfile_swapin(vm_object_t obj, struct sf_io *sfio, o
* only required pages. Readahead pages are dealt with later.
*/
VM_OBJECT_WLOCK(obj);
- for (int i = 0; i < npages; i++) {
- pa[i] = vm_page_grab(obj, OFF_TO_IDX(vmoff(i, off)),
- VM_ALLOC_WIRED | VM_ALLOC_NORMAL | flags);
- if (pa[i] == NULL) {
- npages = i;
- rhpages = 0;
- break;
- }
+
+ grabbed = vm_page_grab_pages(obj, OFF_TO_IDX(off),
+ VM_ALLOC_NORMAL | VM_ALLOC_WIRED | flags, pa, npages);
+ if (grabbed < npages) {
+ for (int i = grabbed; i < npages; i++)
+ pa[i] = NULL;
+ npages = grabbed;
+ rhpages = 0;
}
for (int i = 0; i < npages;) {
More information about the svn-src-all
mailing list