diff options
author | Brian Atkinson <batkinson@lanl.gov> | 2021-02-20 21:16:50 -0700 |
---|---|---|
committer | Tony Hutter <hutter2@llnl.gov> | 2021-11-12 16:31:55 -0800 |
commit | d10c35b640ee61ab4158e61b90c76bf46a4cb033 (patch) | |
tree | 33f4f0e2c2602d4f1bf0237c549f8e7f8be82454 | |
parent | 0b1e6fcc3e7ec110dd282a002e28d98bcd8e08ad (diff) |
Cleaning up uio headers
Making uio_impl.h the common header interface between Linux and FreeBSD
so both OS's can share a common header file. This also helps reduce code
duplication for zfs_uio_t for each OS.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Brian Atkinson <batkinson@lanl.gov>
Closes #11622
-rw-r--r-- | include/os/freebsd/spl/sys/uio.h | 43 | ||||
-rw-r--r-- | include/os/linux/spl/sys/uio.h | 22 | ||||
-rw-r--r-- | include/os/linux/zfs/sys/zfs_context_os.h | 1 | ||||
-rw-r--r-- | include/sys/uio_impl.h | 21 | ||||
-rw-r--r-- | include/sys/zfs_context.h | 1 | ||||
-rw-r--r-- | module/os/freebsd/spl/spl_uio.c | 9 | ||||
-rw-r--r-- | module/zfs/spa_config.c | 2 | ||||
-rw-r--r-- | module/zfs/zfs_ioctl.c | 2 | ||||
-rw-r--r-- | module/zfs/zfs_vnops.c | 2 |
9 files changed, 40 insertions, 63 deletions
diff --git a/include/os/freebsd/spl/sys/uio.h b/include/os/freebsd/spl/sys/uio.h index f1d30195f..b71f2f2e5 100644 --- a/include/os/freebsd/spl/sys/uio.h +++ b/include/os/freebsd/spl/sys/uio.h @@ -55,38 +55,12 @@ typedef struct zfs_uio { #define zfs_uio_fault_disable(u, set) #define zfs_uio_prefaultpages(size, u) (0) - -static __inline void -zfs_uio_init(zfs_uio_t *uio, struct uio *uio_s) -{ - GET_UIO_STRUCT(uio) = uio_s; -} - -static __inline void +static inline void zfs_uio_setoffset(zfs_uio_t *uio, offset_t off) { zfs_uio_offset(uio) = off; } -static __inline int -zfs_uiomove(void *cp, size_t n, zfs_uio_rw_t dir, zfs_uio_t *uio) -{ - ASSERT(zfs_uio_rw(uio) == dir); - return (uiomove(cp, (int)n, GET_UIO_STRUCT(uio))); -} - -int zfs_uiocopy(void *p, size_t n, zfs_uio_rw_t rw, zfs_uio_t *uio, - size_t *cbytes); -void zfs_uioskip(zfs_uio_t *uiop, size_t n); -int zfs_uio_fault_move(void *p, size_t n, zfs_uio_rw_t dir, zfs_uio_t *uio); - -static inline void -zfs_uio_iov_at_index(zfs_uio_t *uio, uint_t idx, void **base, uint64_t *len) -{ - *base = zfs_uio_iovbase(uio, idx); - *len = zfs_uio_iovlen(uio, idx); -} - static inline void zfs_uio_advance(zfs_uio_t *uio, size_t size) { @@ -94,19 +68,14 @@ zfs_uio_advance(zfs_uio_t *uio, size_t size) zfs_uio_offset(uio) += size; } -static inline offset_t -zfs_uio_index_at_offset(zfs_uio_t *uio, offset_t off, uint_t *vec_idx) +static __inline void +zfs_uio_init(zfs_uio_t *uio, struct uio *uio_s) { - *vec_idx = 0; - while (*vec_idx < zfs_uio_iovcnt(uio) && - off >= zfs_uio_iovlen(uio, *vec_idx)) { - off -= zfs_uio_iovlen(uio, *vec_idx); - (*vec_idx)++; - } - - return (off); + GET_UIO_STRUCT(uio) = uio_s; } +int zfs_uio_fault_move(void *p, size_t n, zfs_uio_rw_t dir, zfs_uio_t *uio); + #endif /* !_STANDALONE */ #endif /* !_OPENSOLARIS_SYS_UIO_H_ */ diff --git a/include/os/linux/spl/sys/uio.h b/include/os/linux/spl/sys/uio.h index cafb6805f..8817395f9 100644 --- a/include/os/linux/spl/sys/uio.h +++ b/include/os/linux/spl/sys/uio.h @@ -78,6 +78,8 @@ typedef struct zfs_uio { #define zfs_uio_rlimit_fsize(z, u) (0) #define zfs_uio_fault_move(p, n, rw, u) zfs_uiomove((p), (n), (rw), (u)) +extern int zfs_uio_prefaultpages(ssize_t, zfs_uio_t *); + static inline void zfs_uio_setoffset(zfs_uio_t *uio, offset_t off) { @@ -85,32 +87,12 @@ zfs_uio_setoffset(zfs_uio_t *uio, offset_t off) } static inline void -zfs_uio_iov_at_index(zfs_uio_t *uio, uint_t idx, void **base, uint64_t *len) -{ - *base = zfs_uio_iovbase(uio, idx); - *len = zfs_uio_iovlen(uio, idx); -} - -static inline void zfs_uio_advance(zfs_uio_t *uio, size_t size) { uio->uio_resid -= size; uio->uio_loffset += size; } -static inline offset_t -zfs_uio_index_at_offset(zfs_uio_t *uio, offset_t off, uint_t *vec_idx) -{ - *vec_idx = 0; - while (*vec_idx < zfs_uio_iovcnt(uio) && - off >= zfs_uio_iovlen(uio, *vec_idx)) { - off -= zfs_uio_iovlen(uio, *vec_idx); - (*vec_idx)++; - } - - return (off); -} - static inline void iov_iter_init_compat(struct iov_iter *iter, unsigned int dir, const struct iovec *iov, unsigned long nr_segs, size_t count) diff --git a/include/os/linux/zfs/sys/zfs_context_os.h b/include/os/linux/zfs/sys/zfs_context_os.h index dc1ac4657..51867aba2 100644 --- a/include/os/linux/zfs/sys/zfs_context_os.h +++ b/include/os/linux/zfs/sys/zfs_context_os.h @@ -23,7 +23,6 @@ #ifndef ZFS_CONTEXT_OS_H #define ZFS_CONTEXT_OS_H -#include <sys/uio_impl.h> #include <linux/dcache_compat.h> #include <linux/utsname_compat.h> #include <linux/compiler_compat.h> diff --git a/include/sys/uio_impl.h b/include/sys/uio_impl.h index be70cea54..cde3ef404 100644 --- a/include/sys/uio_impl.h +++ b/include/sys/uio_impl.h @@ -42,8 +42,27 @@ #include <sys/uio.h> extern int zfs_uiomove(void *, size_t, zfs_uio_rw_t, zfs_uio_t *); -extern int zfs_uio_prefaultpages(ssize_t, zfs_uio_t *); extern int zfs_uiocopy(void *, size_t, zfs_uio_rw_t, zfs_uio_t *, size_t *); extern void zfs_uioskip(zfs_uio_t *, size_t); +static inline void +zfs_uio_iov_at_index(zfs_uio_t *uio, uint_t idx, void **base, uint64_t *len) +{ + *base = zfs_uio_iovbase(uio, idx); + *len = zfs_uio_iovlen(uio, idx); +} + +static inline offset_t +zfs_uio_index_at_offset(zfs_uio_t *uio, offset_t off, uint_t *vec_idx) +{ + *vec_idx = 0; + while (*vec_idx < zfs_uio_iovcnt(uio) && + off >= zfs_uio_iovlen(uio, *vec_idx)) { + off -= zfs_uio_iovlen(uio, *vec_idx); + (*vec_idx)++; + } + + return (off); +} + #endif /* _SYS_UIO_IMPL_H */ diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h index 98190079a..92baed35d 100644 --- a/include/sys/zfs_context.h +++ b/include/sys/zfs_context.h @@ -72,6 +72,7 @@ extern "C" { #include <sys/trace.h> #include <sys/procfs_list.h> #include <sys/mod.h> +#include <sys/uio_impl.h> #include <sys/zfs_context_os.h> #else /* _KERNEL || _STANDALONE */ diff --git a/module/os/freebsd/spl/spl_uio.c b/module/os/freebsd/spl/spl_uio.c index f5f3524f7..59a781ee1 100644 --- a/module/os/freebsd/spl/spl_uio.c +++ b/module/os/freebsd/spl/spl_uio.c @@ -41,10 +41,17 @@ */ #include <sys/param.h> -#include <sys/uio.h> +#include <sys/uio_impl.h> #include <sys/vnode.h> #include <sys/zfs_znode.h> +int +zfs_uiomove(void *cp, size_t n, zfs_uio_rw_t dir, zfs_uio_t *uio) +{ + ASSERT(zfs_uio_rw(uio) == dir); + return (uiomove(cp, (int)n, GET_UIO_STRUCT(uio))); +} + /* * same as zfs_uiomove() but doesn't modify uio structure. * return in cbytes how many bytes were copied. diff --git a/module/zfs/spa_config.c b/module/zfs/spa_config.c index dacba127d..795cb5592 100644 --- a/module/zfs/spa_config.c +++ b/module/zfs/spa_config.c @@ -31,7 +31,6 @@ #include <sys/fm/fs/zfs.h> #include <sys/spa_impl.h> #include <sys/nvpair.h> -#include <sys/uio.h> #include <sys/fs/zfs.h> #include <sys/vdev_impl.h> #include <sys/zfs_ioctl.h> @@ -39,6 +38,7 @@ #include <sys/sunddi.h> #include <sys/zfeature.h> #include <sys/zfs_file.h> +#include <sys/zfs_context.h> #ifdef _KERNEL #include <sys/zone.h> #endif diff --git a/module/zfs/zfs_ioctl.c b/module/zfs/zfs_ioctl.c index 6f629c984..ab3d4a4fb 100644 --- a/module/zfs/zfs_ioctl.c +++ b/module/zfs/zfs_ioctl.c @@ -159,7 +159,7 @@ #include <sys/types.h> #include <sys/param.h> #include <sys/errno.h> -#include <sys/uio.h> +#include <sys/uio_impl.h> #include <sys/file.h> #include <sys/kmem.h> #include <sys/cmn_err.h> diff --git a/module/zfs/zfs_vnops.c b/module/zfs/zfs_vnops.c index 68b77fb75..e9b9e7e59 100644 --- a/module/zfs/zfs_vnops.c +++ b/module/zfs/zfs_vnops.c @@ -34,7 +34,7 @@ #include <sys/time.h> #include <sys/sysmacros.h> #include <sys/vfs.h> -#include <sys/uio.h> +#include <sys/uio_impl.h> #include <sys/file.h> #include <sys/stat.h> #include <sys/kmem.h> |