Skip to content

Commit

Permalink
[SCSI] libiscsi: use bh locking instead of irq with session lock
Browse files Browse the repository at this point in the history
The session lock is taken in threads, timers, and bottom halves
like softirqs and tasklets. All the code but
iscsi_conn/session_failure take the session lock with the spin_lock_bh
call. This was done because I thought some offload drivers
would be calling these functions from a irq. They never did,
so this patch has iscsi_conn/session_failure use the bh
locking.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
  • Loading branch information
Mike Christie authored and James Bottomley committed Dec 31, 2010
1 parent f41d472 commit bfcf72e
Showing 1 changed file with 6 additions and 8 deletions.
14 changes: 6 additions & 8 deletions drivers/scsi/libiscsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1338,17 +1338,16 @@ void iscsi_session_failure(struct iscsi_session *session,
{
struct iscsi_conn *conn;
struct device *dev;
unsigned long flags;

spin_lock_irqsave(&session->lock, flags);
spin_lock_bh(&session->lock);
conn = session->leadconn;
if (session->state == ISCSI_STATE_TERMINATE || !conn) {
spin_unlock_irqrestore(&session->lock, flags);
spin_unlock_bh(&session->lock);
return;
}

dev = get_device(&conn->cls_conn->dev);
spin_unlock_irqrestore(&session->lock, flags);
spin_unlock_bh(&session->lock);
if (!dev)
return;
/*
Expand All @@ -1367,17 +1366,16 @@ EXPORT_SYMBOL_GPL(iscsi_session_failure);
void iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err)
{
struct iscsi_session *session = conn->session;
unsigned long flags;

spin_lock_irqsave(&session->lock, flags);
spin_lock_bh(&session->lock);
if (session->state == ISCSI_STATE_FAILED) {
spin_unlock_irqrestore(&session->lock, flags);
spin_unlock_bh(&session->lock);
return;
}

if (conn->stop_stage == 0)
session->state = ISCSI_STATE_FAILED;
spin_unlock_irqrestore(&session->lock, flags);
spin_unlock_bh(&session->lock);

set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx);
set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_rx);
Expand Down

0 comments on commit bfcf72e

Please sign in to comment.