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;) {
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to