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