Another simple refactoring of uvm_fault() removing a goto, ok?
Index: uvm/uvm_fault.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_fault.c,v
retrieving revision 1.106
diff -u -p -r1.106 uvm_fault.c
--- uvm/uvm_fault.c 13 Nov 2020 14:18:25 -0000 1.106
+++ uvm/uvm_fault.c 13 Nov 2020 15:01:41 -0000
@@ -942,12 +942,24 @@ ReFault:
return error;
}
- amap = ufi.entry->aref.ar_amap;
- uobj = ufi.entry->object.uvm_obj;
-
/* (shadowed == TRUE) if there is an anon at the faulting address */
shadowed = uvm_fault_upper_lookup(&ufi, &flt, anons, pages);
+ /* handle case 1: fault on an anon in our amap */
+ if (shadowed == TRUE) {
+ error = uvm_fault_upper(&ufi, &flt, anons, fault_type,
+ access_type);
+ switch (error) {
+ case ERESTART:
+ goto ReFault;
+ default:
+ return error;
+ }
+ }
+
+ amap = ufi.entry->aref.ar_amap;
+ uobj = ufi.entry->object.uvm_obj;
+
/*
* if the desired page is not shadowed by the amap and we have a
* backing object, then we check to see if the backing object would
@@ -1055,30 +1067,12 @@ ReFault:
/*
* note that at this point we are done with any front or back pages.
* we are now going to focus on the center page (i.e. the one we've
- * faulted on). if we have faulted on the top (anon) layer
- * [i.e. case 1], then the anon we want is anons[centeridx] (we have
- * not touched it yet). if we have faulted on the bottom (uobj)
+ * faulted on). if we have faulted on the bottom (uobj)
* layer [i.e. case 2] and the page was both present and available,
* then we've got a pointer to it as "uobjpage" and we've already
* made it BUSY.
*/
- /*
- * there are four possible cases we must address: 1A, 1B, 2A, and 2B
- */
- /* redirect case 2: if we are not shadowed, go to case 2. */
- if (shadowed == FALSE)
- goto Case2;
-
- /* handle case 1: fault on an anon in our amap */
- error = uvm_fault_upper(&ufi, &flt, anons, fault_type, access_type);
- switch (error) {
- case ERESTART:
- goto ReFault;
- default:
- return error;
- }
-Case2:
/* handle case 2: faulting on backing object or zero fill */
/*
* note that uobjpage can not be PGO_DONTCARE at this point. we now