|
@@ -75,6 +75,7 @@ static int qla4xxx_eh_host_reset(struct scsi_cmnd *cmd);
|
|
|
static int qla4xxx_slave_alloc(struct scsi_device *device);
|
|
|
static int qla4xxx_slave_configure(struct scsi_device *device);
|
|
|
static void qla4xxx_slave_destroy(struct scsi_device *sdev);
|
|
|
+static void qla4xxx_scan_start(struct Scsi_Host *shost);
|
|
|
|
|
|
static struct scsi_host_template qla4xxx_driver_template = {
|
|
|
.module = THIS_MODULE,
|
|
@@ -90,6 +91,7 @@ static struct scsi_host_template qla4xxx_driver_template = {
|
|
|
.slave_destroy = qla4xxx_slave_destroy,
|
|
|
|
|
|
.scan_finished = iscsi_scan_finished,
|
|
|
+ .scan_start = qla4xxx_scan_start,
|
|
|
|
|
|
.this_id = -1,
|
|
|
.cmd_per_lun = 3,
|
|
@@ -299,6 +301,18 @@ struct ddb_entry *qla4xxx_alloc_sess(struct scsi_qla_host *ha)
|
|
|
return ddb_entry;
|
|
|
}
|
|
|
|
|
|
+static void qla4xxx_scan_start(struct Scsi_Host *shost)
|
|
|
+{
|
|
|
+ struct scsi_qla_host *ha = shost_priv(shost);
|
|
|
+ struct ddb_entry *ddb_entry, *ddbtemp;
|
|
|
+
|
|
|
+ /* finish setup of sessions that were already setup in firmware */
|
|
|
+ list_for_each_entry_safe(ddb_entry, ddbtemp, &ha->ddb_list, list) {
|
|
|
+ if (ddb_entry->fw_ddb_device_state == DDB_DS_SESSION_ACTIVE)
|
|
|
+ qla4xxx_add_sess(ddb_entry);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Timer routines
|
|
|
*/
|
|
@@ -1178,7 +1192,6 @@ static int __devinit qla4xxx_probe_adapter(struct pci_dev *pdev,
|
|
|
int ret = -ENODEV, status;
|
|
|
struct Scsi_Host *host;
|
|
|
struct scsi_qla_host *ha;
|
|
|
- struct ddb_entry *ddb_entry, *ddbtemp;
|
|
|
uint8_t init_retry_count = 0;
|
|
|
char buf[34];
|
|
|
|
|
@@ -1297,13 +1310,6 @@ static int __devinit qla4xxx_probe_adapter(struct pci_dev *pdev,
|
|
|
if (ret)
|
|
|
goto probe_failed;
|
|
|
|
|
|
- /* Update transport device information for all devices. */
|
|
|
- list_for_each_entry_safe(ddb_entry, ddbtemp, &ha->ddb_list, list) {
|
|
|
- if (ddb_entry->fw_ddb_device_state == DDB_DS_SESSION_ACTIVE)
|
|
|
- if (qla4xxx_add_sess(ddb_entry))
|
|
|
- goto remove_host;
|
|
|
- }
|
|
|
-
|
|
|
printk(KERN_INFO
|
|
|
" QLogic iSCSI HBA Driver version: %s\n"
|
|
|
" QLogic ISP%04x @ %s, host#=%ld, fw=%02d.%02d.%02d.%02d\n",
|
|
@@ -1313,10 +1319,6 @@ static int __devinit qla4xxx_probe_adapter(struct pci_dev *pdev,
|
|
|
scsi_scan_host(host);
|
|
|
return 0;
|
|
|
|
|
|
-remove_host:
|
|
|
- qla4xxx_free_ddb_list(ha);
|
|
|
- scsi_remove_host(host);
|
|
|
-
|
|
|
probe_failed:
|
|
|
qla4xxx_free_adapter(ha);
|
|
|
scsi_host_put(ha->host);
|