summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian King <brking@linux.vnet.ibm.com>2008-08-15 10:59:22 -0500
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-08-16 10:48:25 -0500
commit915be024414c52e311f795566ac938223ba3c847 (patch)
tree85f488b8bbf6d7379500764b3595f541c207a9bf
parent3eddc569770a76f2ca65621cdde3c0a2552b5b0c (diff)
[SCSI] ibmvfc: Fixup host state during reinit
If an ELS is received while the virtual fibre channel adapter is going through its discovery, a flag is set which causes discovery to get re-driven. However, the hosts's state does not get set back to IBMVFC_INITIALIZING and scsi_block_requests does not get called again, which can result in queuecommand ops getting sent during discovery. This should not occur and may cause problems. One example is that we may no longer be logged into the target we send the command to, resulting in a failure which should not have occurred. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
-rw-r--r--drivers/scsi/ibmvscsi/ibmvfc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index ee11568d581f..406ab27f80e9 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -3602,8 +3602,9 @@ static void ibmvfc_do_work(struct ibmvfc_host *vhost)
}
}
- if (vhost->reinit) {
+ if (vhost->reinit && !ibmvfc_set_host_state(vhost, IBMVFC_INITIALIZING)) {
vhost->reinit = 0;
+ scsi_block_requests(vhost->host);
ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_QUERY);
} else {
ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_NONE);