Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix kernel panic due to tsd_exit in ZFS_EXIT(zsb)
The following panic would occur under certain heavy load: [ 4692.202686] Kernel panic - not syncing: thread ffff8800c4f5dd60 terminating with rrw lock ffff8800da1b9c40 held [ 4692.228053] CPU: 1 PID: 6250 Comm: mmap_deadlock Tainted: P OE 3.18.10 openzfs#7 The culprit is that ZFS_EXIT(zsb) would call tsd_exit() every time, which would purge all tsd data for the thread. However, ZFS_ENTER is designed to be reentrant, so we cannot allow ZFS_EXIT to blindly purge tsd data. Instead, when we are doing rrw_exit, if we are removing the last rrn entry, then we calls tsd_exit_key(rrw_tsd_key), which would only remove the rrw_tsd_key tsd entry and also the PID_KEY tsd entry if it is the only entry left for this thread. Signed-off-by: Chunwei Chen <[email protected]>
- Loading branch information