diff options
author | Serapheim Dimitropoulos <[email protected]> | 2019-07-18 12:55:29 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2019-07-18 12:55:29 -0700 |
commit | 1c44a5c97fabc669885df84c3e9b6b5e16f0cd35 (patch) | |
tree | 20a8f88392e42656969419159cde37efc3c19633 /include/sys/spa_impl.h | |
parent | bac15c11983e72cfd8ce10512aa9d227135bbca0 (diff) |
hdr_recl calls zthr_wakeup() on destroyed zthr
There exists a race condition were hdr_recl() calls
zthr_wakeup() on a destroyed zthr. The timeline is the
following:
[1] hdr_recl() runs first and goes intro zthr_wakeup()
because arc_initialized is set.
[2] arc_fini() is called by another thread, zeroes
that flag, destroying the zthr, and goes into
buf_init().
[3] hdr_recl() tries to enter the destroyed mutex
and we blow up.
This patch ensures that the ARC's zthrs are not offloaded
any new work once arc_initialized is set and then destroys
them after all of the ARC state has been deleted.
Reviewed by: Matt Ahrens <[email protected]>
Reviewed by: Brian Behlendorf <[email protected]>
Signed-off-by: Serapheim Dimitropoulos <[email protected]>
Closes #9047
Diffstat (limited to 'include/sys/spa_impl.h')
0 files changed, 0 insertions, 0 deletions