Files
mirror_zfs/include/sys
Richard Yao 4c856fb333 Fix data race between zil_commit() and zil_suspend()
openzfsonwindows/openzfs#206 found that it is possible to trip
`VERIFY(list_is_empty(&lwb->lwb_itxs))` when a `zil_commit()` is delayed
by the scheduler long enough for a parallel `zil_suspend()` operation to
exit `zil_commit_impl()`. This is a data race. To prevent this, we
introduce a `zilog->zl_suspend_lock` rwlock to ensure that all
outstanding `zil_commit()` operations finish before `zil_suspend()`
begins and that subsequent operations fallback to `txg_wait_synced()`
after `zil_suspend()` has begun.

On `PREEMPT_RT` Linux kernels, the `rw_enter()` implementation suffers
from writer starvation. This means that a ZIL intensive system can delay
`zil_suspend()` indefinitely. This is a pre-existing problem that
affects everything that uses rw locks, so it needs to be addressed in
the SPL.  However, builds against `PREEMPT_RT` Linux kernels are
currently broken due to a GPL symbol issue (#11097), so we can safely
disregard that issue for now.

Reported-by: Arun KV <arun.kv@datacore.com>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes #14514
2023-03-01 13:23:09 -08:00
..
2022-05-10 10:18:51 -07:00
2022-05-25 09:18:49 -07:00
2021-06-07 09:02:47 -07:00
2023-01-05 10:15:31 -07:00
2023-01-09 10:45:17 -08:00
2023-01-25 11:30:24 -08:00
2023-01-10 13:39:22 -08:00
2022-10-20 11:57:15 -07:00
2023-01-04 17:29:54 -07:00
2023-01-04 17:29:54 -07:00
2017-10-11 16:54:48 -04:00
2021-06-10 10:42:31 -06:00
2019-06-19 09:48:12 -07:00
2022-07-11 14:16:13 -07:00
2023-02-15 09:06:29 -08:00
2022-09-06 09:43:21 -07:00
2022-10-20 11:57:15 -07:00
2018-02-08 15:28:18 -08:00
2022-10-29 13:05:11 -07:00
2022-06-29 14:08:54 -07:00
2020-07-03 11:05:50 -07:00
2022-10-27 09:54:54 -07:00
2023-01-05 09:31:55 -08:00