summaryrefslogtreecommitdiffstats
path: root/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
diff options
context:
space:
mode:
authoravg <avg@FreeBSD.org>2016-07-13 09:09:21 +0000
committeravg <avg@FreeBSD.org>2016-07-13 09:09:21 +0000
commite6ff78ef2024cfd0d4bf5d915b327069f6ee0481 (patch)
tree6e8dc1e564ac930f29fbca0227fafbd88115ef76 /sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
parent2dc4d7a4ace22b7ed788355fcc4b2119d3039547 (diff)
downloadFreeBSD-src-e6ff78ef2024cfd0d4bf5d915b327069f6ee0481.zip
FreeBSD-src-e6ff78ef2024cfd0d4bf5d915b327069f6ee0481.tar.gz
MFC r298105: zfs: enable vn_io_fault support
Diffstat (limited to 'sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c')
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
index 8e14a97..d8d186c 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
@@ -1083,8 +1083,13 @@ dmu_read_uio_dnode(dnode_t *dn, uio_t *uio, uint64_t size)
else
XUIOSTAT_BUMP(xuiostat_rbuf_copied);
} else {
+#ifdef illumos
err = uiomove((char *)db->db_data + bufoff, tocpy,
UIO_READ, uio);
+#else
+ err = vn_io_fault_uiomove((char *)db->db_data + bufoff,
+ tocpy, uio);
+#endif
}
if (err)
break;
@@ -1178,6 +1183,7 @@ dmu_write_uio_dnode(dnode_t *dn, uio_t *uio, uint64_t size, dmu_tx_t *tx)
else
dmu_buf_will_dirty(db, tx);
+#ifdef illumos
/*
* XXX uiomove could block forever (eg. nfs-backed
* pages). There needs to be a uiolockdown() function
@@ -1186,6 +1192,10 @@ dmu_write_uio_dnode(dnode_t *dn, uio_t *uio, uint64_t size, dmu_tx_t *tx)
*/
err = uiomove((char *)db->db_data + bufoff, tocpy,
UIO_WRITE, uio);
+#else
+ err = vn_io_fault_uiomove((char *)db->db_data + bufoff, tocpy,
+ uio);
+#endif
if (tocpy == db->db_size)
dmu_buf_fill_done(db, tx);
OpenPOWER on IntegriCloud