forked from openzfs/zfs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introduce zilog->zl_commit_lock to protect zil_suspend()
openzfsonwindows#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_commit_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 (openzfs#11097), so we can safely disregard that issue for now. Signed-off-by: Richard Yao <[email protected]>
- Loading branch information
Showing
2 changed files
with
24 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters