diff options
author | Mike Christie <michaelc@cs.wisc.edu> | 2008-05-21 16:54:03 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-07-12 09:22:17 -0400 |
commit | b40977d95fb3a1898ace6a7d97e4ed1a33a440a4 (patch) | |
tree | dfbe7909a066c974f16403e25f687496dde7fb0a /drivers/scsi | |
parent | 5af3e91d232b7e022f258202f72ebb79b8b0c706 (diff) |
[SCSI] iser: fix handling of scsi cmnds during recovery.
After the stop_conn callback has returned the LLD should not
touch the scsi cmds. iscsi_tcp and libiscsi use the
conn->recv_lock and suspend_rx field to halt recv path
processing, but iser does not have any protection.
This patch modifies iser so that userspace can just
call the ep_disconnect callback, which will halt
all recv IO, before calling the stop_conn callback so
we do not have to worry about the conn->recv_lock and
suspend rx field. iser just needs to stop the send side
from accessing the ib conn.
Fixup to handle when the ep poll fails and ep disconnect
is called from Erez.
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/libiscsi.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c index 784a935fad4..79bc49fd7f1 100644 --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c | |||
@@ -1383,11 +1383,12 @@ static void fail_all_commands(struct iscsi_conn *conn, unsigned lun, | |||
1383 | } | 1383 | } |
1384 | } | 1384 | } |
1385 | 1385 | ||
1386 | static void iscsi_suspend_tx(struct iscsi_conn *conn) | 1386 | void iscsi_suspend_tx(struct iscsi_conn *conn) |
1387 | { | 1387 | { |
1388 | set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx); | 1388 | set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx); |
1389 | scsi_flush_work(conn->session->host); | 1389 | scsi_flush_work(conn->session->host); |
1390 | } | 1390 | } |
1391 | EXPORT_SYMBOL_GPL(iscsi_suspend_tx); | ||
1391 | 1392 | ||
1392 | static void iscsi_start_tx(struct iscsi_conn *conn) | 1393 | static void iscsi_start_tx(struct iscsi_conn *conn) |
1393 | { | 1394 | { |