Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
===================================================================
RCS file: /home/chs/netbsd/cvs/src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c,v
retrieving revision 1.70
diff -u -p -r1.70 zfs_vnops.c
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	27 Aug 2020 09:57:33 -0000	1.70
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	4 Oct 2020 23:34:21 -0000
@@ -822,8 +822,8 @@ update_pages(vnode_t *vp, int64_t start,
 			    va + off, DMU_READ_PREFETCH);
 			zfs_unmap_page(pp, va);
 
+			uvm_aio_aiodone_pages(&pp, 1, false, 0);
 			rw_enter(rw, RW_WRITER);
-			uvm_page_unbusy(&pp, 1);
 		}
 		len -= nbytes;
 		off = 0;
@@ -6049,20 +6049,13 @@ zfs_netbsd_getpages(void *v)
 			    PAGE_SIZE, va, DMU_READ_PREFETCH);
 			zfs_unmap_page(pg, va);
 
-			rw_enter(rw, RW_WRITER);
 			if (err != 0) {
-				for (i = 0; i < npages; i++) {
-					pg = ap->a_m[i];
-					if ((pg->flags & PG_FAKE) != 0) {
-						uvm_pagefree(pg);
-					} else {
-						uvm_page_unbusy(&pg, 1);
-					}
-				}
+				uvm_aio_aiodone_pages(ap->a_m, npages, false, err);
 				memset(ap->a_m, 0, sizeof(ap->a_m[0]) *
 				    npages);
 				break;
 			}
+			rw_enter(rw, RW_WRITER);
 			pg->flags &= ~(PG_FAKE);
 		}
 
@@ -6171,9 +6164,7 @@ zfs_putapage(vnode_t *vp, page_t **pp, i
 	dmu_tx_commit(tx);
 
 out_unbusy:
-	rw_enter(rw, RW_WRITER);
-	uvm_page_unbusy(pp, count);
-	rw_exit(rw);
+	uvm_aio_aiodone_pages(pp, count, true, err);
 
 out:
 	return (err);