zfs/include/sys
Rob Norris 2724bcb3d6 zil: allow the ZIL to fail and restart independently of the pool
zil_commit() has always returned void, and thus, cannot fail. Everything
inside it assumed that if anything ever went wrong, it could fall back
on txg_wait_synced() until the txg covering the operations being flushed
from the ZIL has fully committed. This meant that if the pool failed and
failmode=continue was set, syncing operations like fsync() would still
block.

Unblocking zil_commit() means largely the same approach. The difficulty
is that the ZIL carries the record of uncommitted VFS operations (vs the
changed data), and attached to those, callbacks and cvs that will
release userspace callers once the data is on disk. So if we can't write
the ZIL, we also can't release those records until the data is on disk.

This wasn't a problem before, because the zil_commit() would block. If
we change zil_commit() to return error, we still need to track those
entries until the data they represent hits the disk. We also need to
accept new records; just because the ZIL fails may not necessarily mean
the pool itself is unavailable.

This commit reorganises the ZIL to allow zil_commit() to return failure.
If ZIL writes or flushes fail, the ZIL is moved into a "failed" state,
and no further writes are done; all zil_commit() calls are serviced by
the regular txg mechanism. Outstanding records (itx_ts) are held until
the main pool writes their associated txg out. The records are then
released. Once all records are cleared, the ZIL is reset and reopened.

Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
(cherry picked from commit af821006f6602261e690fe6635689cabdeefcadf)
2023-07-05 13:27:31 +00:00
..
crypto gcc 11 cleanup 2021-06-24 13:13:40 -07:00
fm Upstream: Add snapshot and zvol events 2022-02-10 11:04:06 -08:00
fs zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
lua FreeBSD: Reduce stack usage of Lua 2020-09-22 16:03:11 -07:00
sysevent Avoid installing kernel headers on FreeBSD 2020-06-27 17:40:14 -07:00
zstd Update `checkstyle` workflow env to ubuntu-20.04 2021-12-08 13:27:56 -08:00
Makefile.am Restore FreeBSD resource usage accounting 2021-02-19 22:34:33 -08:00
abd.h FreeBSD: Hardcode abd_chunk_size to PAGE_SIZE 2021-09-14 12:36:44 -07:00
abd_impl.h Fix abd leak, kmem_free correct size of abd_t 2021-09-14 12:22:28 -07:00
aggsum.h More aggsum optimizations 2021-06-09 13:05:34 -07:00
arc.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
arc_impl.h Remove b_pabd/b_rabd allocation from arc_hdr_alloc() 2021-09-14 14:31:50 -07:00
avl.h Restore avl_update() calls and related functions 2020-06-03 09:49:32 -07:00
avl_impl.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
bitops.h Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
blkptr.h OpenZFS 8067 - zdb should be able to dump literal embedded block pointer 2017-07-07 11:28:01 -07:00
bplist.h Fast Clone Deletion 2019-07-26 10:54:14 -07:00
bpobj.h Fast Clone Deletion 2019-07-26 10:54:14 -07:00
bptree.h Illumos 4914 - zfs on-disk bookmark structure should be named *_phys_t 2014-08-06 14:48:41 -07:00
bqueue.h Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
btree.h Fix typos 2020-06-09 21:24:09 -07:00
dataset_kstats.h Introduce write-mostly sums 2021-06-09 13:05:34 -07:00
dbuf.h Reduce dbuf_find() lock contention 2022-05-06 12:02:45 -07:00
ddt.h Appease GCC sprintf warnings found on Fedora 32/GCC 10.0.1 2020-08-24 10:32:59 -07:00
dmu.h dmu: add DMU_TX_ASSIGN_CONTINUE flag 2023-07-05 13:27:30 +00:00
dmu_impl.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
dmu_objset.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
dmu_recv.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
dmu_redact.h Suppress cppcheck invalidSyntax warninigs 2021-03-05 17:56:35 -08:00
dmu_send.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
dmu_traverse.h Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
dmu_tx.h dmu: rename dmu_tx_assign flags 2023-07-05 13:27:30 +00:00
dmu_zfetch.h Split dmu_zfetch() speculation and execution parts 2021-03-19 22:56:11 -07:00
dnode.h Silence unused-but-set-variable warning 2022-05-27 09:19:37 -07:00
dsl_bookmark.h Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
dsl_crypt.h dmu_objset_from_ds must be called with dp_config_rwlock held 2020-03-12 10:55:02 -07:00
dsl_dataset.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
dsl_deadlist.h Add fast path for zfs_ioc_space_snaps() handling of empty_bpobj 2019-08-20 11:34:52 -07:00
dsl_deleg.h Remove code for zfs remap 2019-06-24 16:44:01 -07:00
dsl_destroy.h Fast Clone Deletion 2019-07-26 10:54:14 -07:00
dsl_dir.h Introduce dsl_dir_diduse_transfer_space() 2021-09-14 12:38:51 -07:00
dsl_pool.h Fix ENOSPC when unlinking multiple files from full pool 2022-03-08 11:46:03 -08:00
dsl_prop.h Support inheriting properties in channel programs 2020-01-22 17:03:17 -08:00
dsl_scan.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
dsl_synctask.h Add upper bound for slop space calculation 2021-02-24 09:52:43 -08:00
dsl_userhold.h Illumos #3740 2013-11-04 11:17:48 -08:00
edonr.h OpenZFS 4185 - add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R 2016-10-03 14:51:15 -07:00
efi_partition.h Fix typos in include/ 2019-08-30 09:53:15 -07:00
frame.h Linux 5.10 compat: frame.h renamed objtool.h 2020-11-02 22:01:10 +00:00
hkdf.h Encryption patch follow-up 2017-10-11 16:54:48 -04:00
jprint.h Add a JSON equivalent to zpool-status(8) 2023-07-05 13:27:30 +00:00
json_stats.h Add a JSON equivalent to zpool-status(8) 2023-07-05 13:27:30 +00:00
metaslab.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
metaslab_impl.h Optimize allocation throttling 2021-09-14 12:40:15 -07:00
mmp.h Add zfs_multihost_interval tunable handler for FreeBSD 2020-06-23 13:32:42 -07:00
mntent.h Add FreeBSD required defines to mntent.h 2019-11-30 15:49:09 -08:00
mod.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
multilist.h Re-embed multilist_t storage 2021-06-10 10:50:16 -07:00
note.h Update build system and packaging 2018-05-29 16:00:33 -07:00
nvpair.h FreeBSD: make adjustments for the standalone environment 2020-10-13 21:05:49 -07:00
nvpair_impl.h OpenZFS 9580 - Add a hash-table on top of nvlist to speed-up operations 2018-07-30 11:30:03 -07:00
objlist.h Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
pathname.h Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
qat.h QAT related bug fixes 2019-09-12 13:33:44 -07:00
range_tree.h Improve compatibility with C++ consumers 2020-06-06 12:54:04 -07:00
rrwlock.h Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
sa.h Extending FreeBSD UIO Struct 2021-01-20 21:27:30 -08:00
sa_impl.h Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
skein.h OpenZFS 4185 - add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R 2016-10-03 14:51:15 -07:00
spa.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
spa_boot.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
spa_checkpoint.h Serialize ZTHR operations to eliminate races 2019-01-13 10:09:46 -08:00
spa_checksum.h Implementation of AVX2 optimized Fletcher-4 2016-06-02 14:30:51 -07:00
spa_impl.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
spa_log_spacemap.h Log Spacemap Project 2019-07-16 10:11:49 -07:00
space_map.h Extend zdb to print inconsistencies in livelists and metaslabs 2020-07-14 17:51:05 -07:00
space_reftree.h Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
sysevent.h OpenZFS 6939 - add sysevents to zfs core for commands 2017-07-12 21:28:13 -07:00
txg.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
txg_impl.h Fix typos in include/ 2019-08-30 09:53:15 -07:00
u8_textprep.h Throw const on some strings 2020-10-02 17:44:10 -07:00
u8_textprep_data.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
uberblock.h Multi-modifier protection (MMP) 2017-07-13 13:54:00 -04:00
uberblock_impl.h MMP interval and fail_intervals in uberblock 2019-03-21 12:47:57 -07:00
uio_impl.h Cleaning up uio headers 2021-02-20 20:16:50 -08:00
unique.h Illumos #3742 2013-11-04 10:55:25 -08:00
uuid.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
vdev.h Use a helper function to clarify gang block size 2021-03-26 11:19:35 -07:00
vdev_disk.h Make struct vdev_disk_t be platform private 2020-06-16 11:43:33 -07:00
vdev_draid.h Verify dRAID empty sectors 2022-02-03 15:28:01 -08:00
vdev_file.h Add zfs_file_* interface, remove vnodes 2019-11-21 09:32:57 -08:00
vdev_impl.h Ratelimit deadman zevents as with delay zevents 2021-04-14 13:19:49 -07:00
vdev_indirect_births.h OpenZFS 7614, 9064 - zfs device evacuation/removal 2018-04-14 12:16:17 -07:00
vdev_indirect_mapping.h OpenZFS 7614, 9064 - zfs device evacuation/removal 2018-04-14 12:16:17 -07:00
vdev_initialize.h Add TRIM support 2019-03-29 09:13:20 -07:00
vdev_raidz.h Verify dRAID empty sectors 2022-02-03 15:28:01 -08:00
vdev_raidz_impl.h Fix dRAID sequential resilver silent damage handling 2021-05-27 22:31:56 -07:00
vdev_rebuild.h Fix various typos 2021-04-07 13:27:11 -07:00
vdev_removal.h panic in removal_remap test on 4K devices 2019-06-13 13:12:39 -07:00
vdev_trim.h Trim L2ARC 2020-06-09 10:15:08 -07:00
xvattr.h Linux 4.18 compat: inode timespec -> timespec64 2018-06-19 21:51:18 -07:00
zap.h Linux 5.19 compat: zap_flags_t conflict 2022-06-01 14:24:49 -07:00
zap_impl.h OpenZFS 7793 - ztest fails assertion in dmu_tx_willuse_space 2017-03-07 09:51:59 -08:00
zap_leaf.h Fix ENOSPC in "Handle zap_add() failures in ..." 2018-04-18 14:19:50 -07:00
zcp.h filesystem_limit/snapshot_limit is incorrectly enforced against root 2020-07-11 17:18:02 -07:00
zcp_global.h OpenZFS 7431 - ZFS Channel Programs 2018-02-08 15:28:18 -08:00
zcp_iter.h OpenZFS 7431 - ZFS Channel Programs 2018-02-08 15:28:18 -08:00
zcp_prop.h OpenZFS 7431 - ZFS Channel Programs 2018-02-08 15:28:18 -08:00
zcp_set.h Support setting user properties in a channel program 2020-02-14 13:41:42 -08:00
zfeature.h Revert "zhack: Add 'feature disable' command" 2016-05-17 11:52:07 -07:00
zfs_acl.h Return an error code from zfs_acl_chmod_setattr 2019-11-01 10:19:11 -07:00
zfs_bootenv.h zfs label bootenv should store data as nvlist 2020-09-15 15:42:27 -07:00
zfs_context.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
zfs_debug.h Annotated dprintf as printf-like 2021-06-24 13:12:36 -07:00
zfs_delay.h Update build system and packaging 2018-05-29 16:00:33 -07:00
zfs_file.h file reference counts can get corrupted 2021-09-14 12:37:38 -07:00
zfs_fuid.h Replace sprintf()->snprintf() and strcpy()->strlcpy() 2020-06-07 11:42:12 -07:00
zfs_ioctl.h file reference counts can get corrupted 2021-09-14 12:37:38 -07:00
zfs_ioctl_impl.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
zfs_onexit.h file reference counts can get corrupted 2021-09-14 12:37:38 -07:00
zfs_project.h Minor diff reduction with ZoF in include/sys 2019-11-27 11:11:03 -08:00
zfs_quota.h File incorrectly zeroed when receiving incremental stream that toggles -L 2020-06-09 10:41:01 -07:00
zfs_racct.h Restore FreeBSD resource usage accounting 2021-02-19 22:34:33 -08:00
zfs_ratelimit.h Change checksum & IO delay ratelimit values 2018-03-04 17:34:51 -08:00
zfs_refcount.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
zfs_rlock.h Add a "try" operation for range locks 2020-07-06 11:53:31 -07:00
zfs_sa.h Extending FreeBSD UIO Struct 2021-01-20 21:27:30 -08:00
zfs_stat.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
zfs_sysfs.h Fix in-kernel sysfs entries 2018-09-06 21:44:52 -07:00
zfs_vfsops.h Add 'zfs rename -u' to rename without remounting 2020-09-01 16:14:16 -07:00
zfs_vnops.h Extending FreeBSD UIO Struct 2021-01-20 21:27:30 -08:00
zfs_znode.h zfs: support force exporting pools 2023-07-05 13:27:30 +00:00
zil.h zil: allow the ZIL to fail and restart independently of the pool 2023-07-05 13:27:31 +00:00
zil_impl.h zil: allow the ZIL to fail and restart independently of the pool 2023-07-05 13:27:31 +00:00
zio.h zio_flush: require caller to decide if errors should propagate 2023-07-05 13:27:31 +00:00
zio_checksum.h Remove dependency on linear ABD 2017-03-29 12:24:51 -07:00
zio_compress.h Add zstd support to zfs 2020-08-20 10:30:06 -07:00
zio_crypt.h Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
zio_impl.h Add zstd support to zfs 2020-08-20 10:30:06 -07:00
zio_priority.h Add device rebuild feature 2020-07-03 11:05:50 -07:00
zrlock.h OpenZFS 6328 - Fix cstyle errors in zfs codebase 2017-01-12 09:42:11 -08:00
zthr.h Avoid memory allocations in the ARC eviction thread 2022-02-03 15:30:52 -08:00
zvol.h async zvol minor node creation interferes with receive 2020-02-03 09:33:14 -08:00
zvol_impl.h Fix zfs_get_data access to files with wrong generation 2021-03-19 22:53:31 -07:00