summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Atkinson <batkinson@lanl.gov>2021-02-20 21:16:50 -0700
committerTony Hutter <hutter2@llnl.gov>2021-11-12 16:31:55 -0800
commitd10c35b640ee61ab4158e61b90c76bf46a4cb033 (patch)
tree33f4f0e2c2602d4f1bf0237c549f8e7f8be82454
parent0b1e6fcc3e7ec110dd282a002e28d98bcd8e08ad (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.h43
-rw-r--r--include/os/linux/spl/sys/uio.h22
-rw-r--r--include/os/linux/zfs/sys/zfs_context_os.h1
-rw-r--r--include/sys/uio_impl.h21
-rw-r--r--include/sys/zfs_context.h1
-rw-r--r--module/os/freebsd/spl/spl_uio.c9
-rw-r--r--module/zfs/spa_config.c2
-rw-r--r--module/zfs/zfs_ioctl.c2
-rw-r--r--module/zfs/zfs_vnops.c2
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>