Module Name:    src
Committed By:   ad
Date:           Tue May 26 21:52:12 UTC 2020

Modified Files:
        src/sys/uvm: uvm_page_array.c

Log Message:
uvm_page_array_fill(): return ENOENT in all cases when nothing's left.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/uvm/uvm_page_array.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/uvm/uvm_page_array.c
diff -u src/sys/uvm/uvm_page_array.c:1.8 src/sys/uvm/uvm_page_array.c:1.9
--- src/sys/uvm/uvm_page_array.c:1.8	Mon May 25 22:01:26 2020
+++ src/sys/uvm/uvm_page_array.c	Tue May 26 21:52:12 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_page_array.c,v 1.8 2020/05/25 22:01:26 ad Exp $	*/
+/*	$NetBSD: uvm_page_array.c,v 1.9 2020/05/26 21:52:12 ad Exp $	*/
 
 /*-
  * Copyright (c)2011 YAMAMOTO Takashi,
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_page_array.c,v 1.8 2020/05/25 22:01:26 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_page_array.c,v 1.9 2020/05/26 21:52:12 ad Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -140,6 +140,7 @@ uvm_page_array_fill(struct uvm_page_arra
 	const int flags = ar->ar_flags;
 	const bool dense = (flags & UVM_PAGE_ARRAY_FILL_DENSE) != 0;
 	const bool backward = (flags & UVM_PAGE_ARRAY_FILL_BACKWARD) != 0;
+	int error = 0;
 
 	if (nwant != 0 && nwant < maxpages) {
 		maxpages = nwant;
@@ -172,8 +173,7 @@ uvm_page_array_fill(struct uvm_page_arra
 			 * if dense or looking for tagged entries (or
 			 * working backwards), fail right away.
 			 */
-			uvm_page_array_clear(ar);
-			return ENOENT;
+			npages = 0;
 		} else {
 			/*
 			 * there's nothing else to be found with the current
@@ -187,17 +187,16 @@ uvm_page_array_fill(struct uvm_page_arra
 			npages = 1;
 			ar->ar_pages[0] = NULL;
 		}
+		error = ENOENT;
 	}
 	KASSERT(npages <= maxpages);
 	ar->ar_npages = npages;
 	ar->ar_idx = 0;
 #if defined(DEBUG)
-	for (i = 0; i < ar->ar_npages; i++) {
+	for (i = 0; error == 0 && i < ar->ar_npages; i++) {
 		struct vm_page * const pg = ar->ar_pages[i];
 
-		if (pg == NULL) {
-			continue;
-		}
+		KASSERT(pg != NULL);
 		KDASSERT(pg->uobject == uobj);
 		if (backward) {
 			KDASSERT(pg->offset <= off);
@@ -210,7 +209,7 @@ uvm_page_array_fill(struct uvm_page_arra
 		}
 	}
 #endif /* defined(DEBUG) */
-	return 0;
+	return error;
 }
 
 /*

Reply via email to