mirror_zfs/module
Rob Norris 3b5c3f52d2 zio: lock parent zios when updating wait counts on reexecute
As zios are reexecuted after resume from suspension, their ready and
wait states need to be propagated to wait counts on all their parents.

It's possible for those parents to have active children passing through
READY or DONE, which then end up in zio_notify_parent(), take their
parent's lock, and decrement the wait count. Without also taking a lock
here, it's possible for an increment race to occur, which leads to
either there being no references left (tripping the assert in
zio_notify_parent()), or a parent waiting forever for a nonexistent
child to complete.

To protect against this, we simply take the appropriate zio locks in
zio_reexecute() before updating the wait counts.

Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.

Reviewed-by: Allan Jude <allan@klarasystems.com>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Closes #17016
2025-02-28 00:42:29 +05:00
..
avl Suppress Clang Static Analyzer false positive in the AVL tree code. 2023-03-08 13:51:21 -08:00
icp icp: remove redundant FreeBSD check 2024-05-31 15:13:59 -07:00
lua lua: add flex array field to TString type 2024-09-30 10:30:03 -07:00
nvpair Remove unnecessary CSTYLED escapes on top-level macro invocations 2024-12-06 09:05:02 -08:00
os Update pin_user_pages() calls for Direct I/O 2025-02-25 22:33:25 +05:00
unicode Illumos #15286: do_composition() needs sign awareness 2023-01-05 11:16:21 -08:00
zcommon zprop: fix value help for ZPOOL_PROP_CAPACITY 2024-12-29 11:53:45 -08:00
zfs zio: lock parent zios when updating wait counts on reexecute 2025-02-28 00:42:29 +05:00
zstd compress: change zio_compress API to use ABDs 2024-08-22 16:22:24 -07:00
.gitignore FreeBSD: Ignore symlink to i386 includes 2022-08-02 16:34:23 -07:00
Kbuild.in Make the vfs.zfs.vdev.raidz_impl sysctl cross-platform 2025-02-25 22:32:11 +05:00
Makefile.bsd zfs_znode: lift common code to a single shared file 2024-09-19 15:49:45 -07:00
Makefile.in Makefile.in: pass ARCH for modules_install as well 2025-02-25 22:25:41 +05:00