mirror_zfs/module/zfs
Rich Ercolani 2ef1ce66f5 Handle partial reads in zfs_read
Currently, dmu_read_uio_dnode can read 64K of a requested 1M in one
loop, get EFAULT back from zfs_uiomove() (because the iovec only holds
64k), and return EFAULT, which turns into EAGAIN on the way out. EAGAIN
gets interpreted as "I didn't read anything", the caller tries again
without consuming the 64k we already read, and we're stuck.

This apparently works on newer kernels because the caller which breaks
on older Linux kernels by happily passing along a 1M read request and a
64k iovec just requests 64k at a time.

With this, we now won't return EFAULT if we got a partial read.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
Closes #12370 
Closes #12509
Closes #12516
2021-11-12 16:31:55 -08:00
..
abd.c Use fallthrough macro 2021-11-12 15:24:36 -08:00
aggsum.c
arc.c Avoid deadlock when removing L2ARC devices under I/O 2021-06-23 13:22:15 -07:00
blkptr.c Add zstd support to zfs 2020-08-20 10:30:06 -07:00
bplist.c
bpobj.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
bptree.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
bqueue.c
btree.c Fix typo in btree.c 2020-08-17 15:25:37 -07:00
dataset_kstats.c
dbuf_stats.c Eliminate gratuitous bzeroing in dbuf_stats_hash_table_data 2020-10-01 12:22:54 -07:00
dbuf.c Remove UIO_ZEROCOPY functions structures 2021-11-12 16:31:55 -08:00
ddt_zap.c
ddt.c Tinker with slop space accounting with dedup 2021-09-22 15:19:08 -07:00
dmu_diff.c
dmu_object.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
dmu_objset.c Relax special_small_blocks assertion. 2021-01-24 16:06:16 -08:00
dmu_recv.c Fix dmu_recv_stream test for resumable 2021-06-23 13:22:15 -07:00
dmu_redact.c Fix dnode refcount tracking 2020-11-11 11:03:24 -08:00
dmu_send.c implicit conversion from 'boolean_t' to 'ds_hold_flags_t' 2021-01-05 10:30:19 -08:00
dmu_traverse.c zil_parse: make callback parameters const 2020-10-16 13:01:53 -07:00
dmu_tx.c
dmu_zfetch.c Expose zfetch_max_idistance tunable 2020-10-16 13:02:39 -07:00
dmu.c Extending FreeBSD UIO Struct 2021-11-12 16:31:55 -08:00
dnode_sync.c dnode_sync is careless with range tree 2020-08-27 16:07:05 -07:00
dnode.c Initialize dn_next_type[] in the dnode constructor 2021-09-22 15:19:08 -07:00
dsl_bookmark.c Fix kernel panic induced by redacted send 2020-12-23 14:34:59 -08:00
dsl_crypt.c Prune dead branch reported by Coverity 2020-10-01 12:20:16 -07:00
dsl_dataset.c Add zstd support to zfs 2020-08-20 10:30:06 -07:00
dsl_deadlist.c Livelist logic should handle dedup blkptrs 2021-09-22 15:19:08 -07:00
dsl_deleg.c
dsl_destroy.c Fix i/o error handling of livelists and zap iteration 2020-08-05 10:22:09 -07:00
dsl_dir.c Add 'zfs rename -u' to rename without remounting 2020-09-03 16:16:15 -07:00
dsl_pool.c
dsl_prop.c Use fallthrough macro 2021-11-12 15:24:36 -08:00
dsl_scan.c Update references to nonexistent man pages in code 2020-10-30 16:04:41 -07:00
dsl_synctask.c nowait synctask must succeed 2020-09-09 10:25:59 -07:00
dsl_userhold.c
edonr_zfs.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
fm.c file reference counts can get corrupted 2021-09-22 15:19:08 -07:00
gzip.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
hkdf.c
lz4.c Prefix zfs internal endian checks with _ZFS 2020-07-28 13:02:49 -07:00
lzjb.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
Makefile.in Share zfs_fsync, zfs_read, zfs_write, et al between Linux and FreeBSD 2020-12-23 14:34:59 -08:00
metaslab.c Update references to nonexistent man pages in code 2020-10-30 16:04:41 -07:00
mmp.c Initialize mmp_last_write when the mmp thread starts 2020-09-09 10:26:04 -07:00
multilist.c Make use of ZFS_DEBUG consistent within kmod sources 2020-07-25 20:07:44 -07:00
objlist.c
pathname.c Replace ZFS on Linux references with OpenZFS 2020-10-16 13:01:24 -07:00
range_tree.c Fix incorrect deletion order in range_tree_add_impl gap case 2020-10-16 13:05:23 -07:00
refcount.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
rrwlock.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
sa.c Extending FreeBSD UIO Struct 2021-11-12 16:31:55 -08:00
sha256.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
skein_zfs.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
spa_boot.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
spa_checkpoint.c
spa_config.c Cleaning up uio headers 2021-11-12 16:31:55 -08:00
spa_errlog.c
spa_history.c Update references to nonexistent man pages in code 2020-10-30 16:04:41 -07:00
spa_log_spacemap.c
spa_misc.c Fix unfortunate NULL in spa_update_dspace 2021-09-22 15:19:08 -07:00
spa_stats.c FreeBSD: Add support for procfs_list 2020-10-01 12:18:56 -07:00
spa.c Use fallthrough macro 2021-11-12 15:24:36 -08:00
space_map.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
space_reftree.c
THIRDPARTYLICENSE.cityhash
THIRDPARTYLICENSE.cityhash.descrip
txg.c Replace cv_{timed}wait_sig with cv_{timed}wait_idle where appropriate 2020-09-09 10:21:01 -07:00
uberblock.c
unique.c
vdev_cache.c
vdev_indirect_births.c
vdev_indirect_mapping.c
vdev_indirect.c ZTS: fix removal_condense_export test case 2021-06-23 13:22:14 -07:00
vdev_initialize.c Cancel TRIM / initialize on FAULTED non-writeable vdevs 2021-06-23 13:22:14 -07:00
vdev_label.c Use fallthrough macro 2021-11-12 15:24:36 -08:00
vdev_mirror.c vdev_ashift should only be set once 2020-09-18 12:40:20 -07:00
vdev_missing.c Import vdev ashift optimization from FreeBSD 2020-08-21 12:53:17 -07:00
vdev_queue.c Fix for "Reduce latency effects of non-interactive I/O" 2020-12-23 13:09:17 -08:00
vdev_raidz_math_aarch64_neon_common.h FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_aarch64_neon.c
vdev_raidz_math_aarch64_neonx2.c
vdev_raidz_math_avx2.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_avx512bw.c Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
vdev_raidz_math_avx512f.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_impl.h
vdev_raidz_math_powerpc_altivec_common.h FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_powerpc_altivec.c Prefix zfs internal endian checks with _ZFS 2020-07-28 13:02:49 -07:00
vdev_raidz_math_scalar.c Use fallthrough macro 2021-11-12 15:24:36 -08:00
vdev_raidz_math_sse2.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_ssse3.c Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
vdev_raidz_math.c Reduce fletcher4 and raidz benchmark times 2020-12-23 14:34:59 -08:00
vdev_raidz.c Avoid posting duplicate zpool events 2020-09-09 10:26:00 -07:00
vdev_rebuild.c nowait synctask must succeed 2020-09-09 10:25:59 -07:00
vdev_removal.c special device removal space accounting fixes 2020-12-23 14:34:59 -08:00
vdev_root.c Import vdev ashift optimization from FreeBSD 2020-08-21 12:53:17 -07:00
vdev_trim.c Cancel TRIM / initialize on FAULTED non-writeable vdevs 2021-06-23 13:22:14 -07:00
vdev.c Rescan enclosure sysfs path on import 2021-11-12 16:31:55 -08:00
zap_leaf.c
zap_micro.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
zap.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
zcp_get.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
zcp_global.c
zcp_iter.c
zcp_set.c
zcp_synctask.c filesystem_limit/snapshot_limit is incorrectly enforced against root 2020-07-11 17:18:02 -07:00
zcp.c Channel program may spuriously fail with "memory limit exhausted" 2020-11-12 09:02:00 -08:00
zfeature.c Throw const on some strings 2020-10-16 12:55:56 -07:00
zfs_byteswap.c
zfs_fm.c Ratelimit deadman zevents as with delay zevents 2021-06-23 13:22:14 -07:00
zfs_fuid.c Fix regression in POSIX mode behavior 2021-06-23 13:22:14 -07:00
zfs_ioctl.c Cleaning up uio headers 2021-11-12 16:31:55 -08:00
zfs_log.c Initialize all fields in zfs_log_xvattr() 2021-09-22 15:19:08 -07:00
zfs_onexit.c file reference counts can get corrupted 2021-09-22 15:19:08 -07:00
zfs_quota.c
zfs_ratelimit.c
zfs_replay.c Use fallthrough macro 2021-11-12 15:24:36 -08:00
zfs_rlock.c Add a "try" operation for range locks 2020-07-06 11:53:31 -07:00
zfs_sa.c Extending FreeBSD UIO Struct 2021-11-12 16:31:55 -08:00
zfs_vnops.c Handle partial reads in zfs_read 2021-11-12 16:31:55 -08:00
zil.c Zero pad bytes following TX_WRITE log data 2021-09-22 15:19:08 -07:00
zio_checksum.c
zio_compress.c Use fallthrough macro 2021-11-12 15:24:36 -08:00
zio_inject.c
zio.c Avoid deadlock when removing L2ARC devices under I/O 2021-06-23 13:22:15 -07:00
zle.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
zrlock.c
zthr.c Retain thread name when resuming a zthr 2020-09-09 10:21:16 -07:00
zvol.c Fix zfs_get_data access to files with wrong generation 2021-06-23 13:22:15 -07:00