diff options
author | avg <avg@FreeBSD.org> | 2016-07-13 09:09:21 +0000 |
---|---|---|
committer | avg <avg@FreeBSD.org> | 2016-07-13 09:09:21 +0000 |
commit | e6ff78ef2024cfd0d4bf5d915b327069f6ee0481 (patch) | |
tree | 6e8dc1e564ac930f29fbca0227fafbd88115ef76 /sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c | |
parent | 2dc4d7a4ace22b7ed788355fcc4b2119d3039547 (diff) | |
download | FreeBSD-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.c | 10 |
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); |