Skip to content

Commit

Permalink
iscsi-target: Fix potential deadlock on lock taken in timer
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Nicholas Bellinger <[email protected]>
  • Loading branch information
rolandd authored and Nicholas Bellinger committed Nov 8, 2012
1 parent bb7a8c8 commit 998866b
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions drivers/target/iscsi/iscsi_target_login.c
Original file line number Diff line number Diff line change
Expand Up @@ -254,9 +254,9 @@ static int iscsi_login_zero_tsih_s1(
kfree(sess);
return -ENOMEM;
}
spin_lock(&sess_idr_lock);
spin_lock_bh(&sess_idr_lock);
ret = idr_get_new(&sess_idr, NULL, &sess->session_index);
spin_unlock(&sess_idr_lock);
spin_unlock_bh(&sess_idr_lock);

if (ret < 0) {
pr_err("idr_get_new() for sess_idr failed\n");
Expand Down

0 comments on commit 998866b

Please sign in to comment.