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);