mirror_zfs/include/os/linux/spl/sys
Brian Atkinson 0e21e473a7 Update pin_user_pages() calls for Direct I/O
Originally #16856 updated Linux Direct I/O requests to use the new
pin_user_pages API. However, it was an oversight that this PR only
handled iov_iter's of type ITER_IOVEC and ITER_UBUF. Other iov_iter
types may try and use the pin_user_pages API if it is available. This
can lead to panics as the iov_iter is not being iterated over correctly
in zfs_uio_pin_user_pages().

Unfortunately, generic iov_iter API's that call pin_user_page_fast() are
protected as GPL only. Rather than update zfs_uio_pin_user_pages() to
account for all iov_iter types, we can simply just call
zfs_uio_get_dio_page_iov_iter() if the iov_iter type is not ITER_IOVEC
or ITER_UBUF. zfs_uio_get_dio_page_iov_iter() calls the
iov_iter_get_pages() calls that can handle any iov_iter type.

In the future it might be worth using the exposed iov_iter iterator
functions that are included in the header iov_iter.h since v6.7. These
functions allow for any iov_iter type to be iterated over and advanced
while applying a step function during iteration. This could possibly be
leveraged in zfs_uio_pin_user_pages().

A new ZFS test case was added to test that a ITER_BVEC is handled
correctly using this new code path. This test case was provided though
issue #16956.

Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ameer Hamza <ahamza@ixsystems.com>
Signed-off-by: Brian Atkinson <batkinson@lanl.gov>
Closes #16956 
Closes #17006
2025-02-25 22:33:25 +05:00
..
ia32 x86 asm: Replace .align with .balign 2023-01-24 09:04:39 -08:00
acl.h Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
atomic.h More aggsum optimizations 2021-06-07 09:02:47 -07:00
byteorder.h Reduce false positives from Static Analyzers 2022-09-30 15:30:12 -07:00
callb.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
callo.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
cmn_err.h spl: cmn_err_once() should be usable in brace-less if else statements 2023-03-15 11:13:25 -07:00
condvar.h config: remove HAVE_WAIT_QUEUE_* 2024-09-18 11:23:50 -07:00
cred.h config: remove HAVE_SUPER_USER_NS 2024-09-18 11:23:50 -07:00
ctype.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
debug.h Add missing parenthesis in VERIFYF() 2024-12-02 18:14:26 -08:00
disp.h Cleanup: Use OpenSolaris functions to call scheduler 2022-09-12 09:55:37 -07:00
errno.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
fcntl.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
file.h config: remove HAVE_INODE_LOCK_SHARED 2024-09-18 11:23:50 -07:00
inttypes.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
isa_defs.h Add loongarch64 support 2023-04-25 16:05:45 -07:00
kmem_cache.h Linux 6.12: avoid kmem_cache_create redefinition 2024-10-01 13:53:33 -07:00
kmem.h Use __attribute__((malloc)) on memory allocation functions 2023-05-26 15:47:52 -07:00
kstat.h Cleanup: Switch to strlcpy from strncpy 2022-09-27 16:35:29 -07:00
list.h Remove list_size struct member from list implementation 2024-01-26 14:46:42 -08:00
misc.h zed: mark disks as REMOVED when they are removed 2022-09-28 09:48:46 -07:00
mod_os.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
mutex.h Add mutex_enter_interruptible() for interruptible sleeping IOCTLs 2023-10-26 09:17:40 -07:00
param.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
proc.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
processor.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
procfs_list.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
random.h FreeBSD: fix compilation of FreeBSD world after 29274c9f6 2021-06-25 10:28:51 -07:00
rwlock.h Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
shrinker.h Linux 6.7 compat: rework shrinker setup for heap allocations 2023-12-20 11:47:55 -08:00
sid.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
signal.h config: remove HAVE_SCHED_SIGNAL_HEADER 2024-09-18 11:23:50 -07:00
simd.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
stat.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
string.h config: remove HAVE_KERNEL_STRSCPY 2024-09-18 11:23:49 -07:00
sunddi.h Remove hw_serial, ddi_strtoul() 2022-05-13 10:15:31 -07:00
sysmacros.h Replace P2ALIGN with P2ALIGN_TYPED and delete P2ALIGN. 2024-05-10 08:47:21 -07:00
systeminfo.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
taskq.h Fix compile-time warnings caused by duplicate struct typedefs 2024-10-21 13:02:07 -07:00
thread.h spl/thread: explicitly define thread_func_t as noreturn 2024-10-21 13:02:07 -07:00
time.h config: remove HAVE_KTIME_GET_RAW_TS64 2024-09-18 11:23:50 -07:00
timer.h config: remove HAVE_KERNEL_TIMER_SETUP 2024-09-18 11:23:50 -07:00
trace_spl.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
trace_taskq.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
trace.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
tsd.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
types32.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
types.h Linux 6.10 compat: Fix tracepoints definitions 2024-09-17 13:38:02 -07:00
uio.h Update pin_user_pages() calls for Direct I/O 2025-02-25 22:33:25 +05:00
user.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
vfs.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
vmem.h Use __attribute__((malloc)) on memory allocation functions 2023-05-26 15:47:52 -07:00
vmsystm.h Add membar_sync 2022-09-20 15:32:44 -07:00
vnode.h Consolidate zfs_holey and zfs_access 2020-10-31 09:40:08 -07:00
wait.h config: remove HAVE_WAIT_QUEUE_* 2024-09-18 11:23:50 -07:00
wmsum.h config: remove HAVE_PERCPU_COUNTER_ADD_BATCH 2024-09-18 11:23:50 -07:00
zmod.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
zone.h Add Linux namespace delegation support 2022-06-10 09:51:46 -07:00