Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/external/cddl/osnet/dist/uts/common/fs/zfs Commit the ZFS fi...
details: https://anonhg.NetBSD.org/src/rev/d0d68b7ce0dc
branches: trunk
changeset: 978270:d0d68b7ce0dc
user: chs <chs%NetBSD.org@localhost>
date: Sun Nov 15 00:54:13 2020 +0000
description:
Commit the ZFS file that I forgot in this previous commit:
Move the handling of PG_PAGEOUT from uvm_aio_aiodone_pages() to
uvm_page_unbusy() so that all callers of uvm_page_unbusy() don't need to
handle this flag separately. Split out the pages part of uvm_aio_aiodone()
into uvm_aio_aiodone_pages() in rump just like in the real kernel.
In ZFS functions that can fail to copy data between the ARC and VM pages,
use uvm_aio_aiodone_pages() rather than uvm_page_unbusy() so that we can
handle these "I/O" errors. Fixes PR 55702.
diffstat:
external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c | 20 +++--------------
1 files changed, 4 insertions(+), 16 deletions(-)
diffs (56 lines):
diff -r a0d97a93a1f9 -r d0d68b7ce0dc external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
--- a/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Sun Nov 15 00:19:17 2020 +0000
+++ b/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Sun Nov 15 00:54:13 2020 +0000
@@ -6049,20 +6049,13 @@
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);
}
@@ -6089,14 +6082,13 @@
voff_t len, klen;
int err;
- bool async = (flags & PGO_SYNCIO) == 0;
bool *cleanedp;
struct uvm_object *uobj = &vp->v_uobj;
krwlock_t *rw = uobj->vmobjlock;
if (zp->z_sa_hdl == NULL) {
err = 0;
- goto out_unbusy;
+ goto out;
}
/*
@@ -6170,12 +6162,8 @@
}
dmu_tx_commit(tx);
-out_unbusy:
- rw_enter(rw, RW_WRITER);
- uvm_page_unbusy(pp, count);
- rw_exit(rw);
-
out:
+ uvm_aio_aiodone_pages(pp, count, true, err);
return (err);
}
Home |
Main Index |
Thread Index |
Old Index