mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-14 16:39:21 +00:00
iscsi-target: Fix potential deadlock on lock taken in timer
We need to disable BHs when taking sess_idr_lock because the iscsit_handle_time2retain_timeout() timer function takes se_tpg->session_lock, and iscsit_close_session() nests sess_idr_lock inside se_tpg->session_lock. So if the timer can run inside sess_idr_lock, we have a potential AB-BA deadlock. Fix this by disabling BHs when taking sess_idr_lock. This was found because of a lockdep warning, but it looks like a real (if highly theoretical) deadlock. In any case avoiding lockdep spew so that we can find other issues is a worthy cause. Signed-off-by: Roland Dreier <roland@purestorage.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
bb7a8c8eb9
commit
998866b074
@ -254,9 +254,9 @@ static int iscsi_login_zero_tsih_s1(
|
|||||||
kfree(sess);
|
kfree(sess);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
spin_lock(&sess_idr_lock);
|
spin_lock_bh(&sess_idr_lock);
|
||||||
ret = idr_get_new(&sess_idr, NULL, &sess->session_index);
|
ret = idr_get_new(&sess_idr, NULL, &sess->session_index);
|
||||||
spin_unlock(&sess_idr_lock);
|
spin_unlock_bh(&sess_idr_lock);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
pr_err("idr_get_new() for sess_idr failed\n");
|
pr_err("idr_get_new() for sess_idr failed\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user