if (fw_ddb_entry == NULL) {
DEBUG2(printk("scsi%ld: %s: Unable to allocate dma buffer.\n",
ha->host_no, __func__));
- return NULL;
+ goto exit_get_ddb_entry_no_free;
}
if (qla4xxx_get_fwddb_entry(ha, fw_ddb_index, fw_ddb_entry,
fw_ddb_entry_dma, NULL, NULL,
&device_state, NULL, NULL, NULL) ==
- QLA_ERROR) {
+ QLA_ERROR) {
DEBUG2(printk("scsi%ld: %s: failed get_ddb_entry for "
"fw_ddb_index %d\n", ha->host_no, __func__,
fw_ddb_index));
- return NULL;
+ goto exit_get_ddb_entry;
}
/* Allocate DDB if not already allocated. */
}
}
+ /* if not found allocate new ddb */
if (!found) {
DEBUG2(printk("scsi%ld: %s: ddb[%d] not found - allocating "
"new ddb\n", ha->host_no, __func__,
ddb_entry = qla4xxx_alloc_ddb(ha, fw_ddb_index);
}
- /* if not found allocate new ddb */
+exit_get_ddb_entry:
dma_free_coherent(&ha->pdev->dev, sizeof(*fw_ddb_entry), fw_ddb_entry,
fw_ddb_entry_dma);
+exit_get_ddb_entry_no_free:
return ddb_entry;
}
if (ddb_entry == NULL) {
DEBUG2(printk("scsi%ld: %s: ddb_entry is NULL\n", ha->host_no,
__func__));
- goto exit_update_ddb;
+
+ goto exit_update_ddb_no_free;
}
/* Make sure the dma buffer is valid */
DEBUG2(printk("scsi%ld: %s: Unable to allocate dma buffer.\n",
ha->host_no, __func__));
- goto exit_update_ddb;
+ goto exit_update_ddb_no_free;
}
if (qla4xxx_get_fwddb_entry(ha, fw_ddb_index, fw_ddb_entry,
&ddb_entry->fw_ddb_device_state, &conn_err,
&ddb_entry->tcp_source_port_num,
&ddb_entry->connection_id) ==
- QLA_ERROR) {
+ QLA_ERROR) {
DEBUG2(printk("scsi%ld: %s: failed get_ddb_entry for "
"fw_ddb_index %d\n", ha->host_no, __func__,
fw_ddb_index));
dma_free_coherent(&ha->pdev->dev, sizeof(*fw_ddb_entry),
fw_ddb_entry, fw_ddb_entry_dma);
+exit_update_ddb_no_free:
return status;
}
**/
static int qla4xxx_build_ddb_list(struct scsi_qla_host *ha)
{
- int status = QLA_SUCCESS;
+ int status = QLA_ERROR;
uint32_t fw_ddb_index = 0;
uint32_t next_fw_ddb_index = 0;
uint32_t ddb_state;
if (fw_ddb_entry == NULL) {
DEBUG2(dev_info(&ha->pdev->dev, "%s: DMA alloc failed\n",
__func__));
- return QLA_ERROR;
+
+ goto exit_build_ddb_list_no_free;
}
dev_info(&ha->pdev->dev, "Initializing DDBs ...\n");
DEBUG2(printk("scsi%ld: %s: get_ddb_entry, "
"fw_ddb_index %d failed", ha->host_no,
__func__, fw_ddb_index));
- return QLA_ERROR;
+ goto exit_build_ddb_list;
}
DEBUG2(printk("scsi%ld: %s: Getting DDB[%d] ddbstate=0x%x, "
"get_ddb_entry %d failed\n",
ha->host_no,
__func__, fw_ddb_index));
- return QLA_ERROR;
+ goto exit_build_ddb_list;
}
}
}
DEBUG2(printk("scsi%ld: %s: Unable to allocate memory "
"for device at fw_ddb_index %d\n",
ha->host_no, __func__, fw_ddb_index));
- return QLA_ERROR;
+ goto exit_build_ddb_list;
}
/* Fill in the device structure */
if (qla4xxx_update_ddb_entry(ha, ddb_entry, fw_ddb_index) ==
ha->fw_ddb_index_map[fw_ddb_index] =
(struct ddb_entry *)INVALID_ENTRY;
-
DEBUG2(printk("scsi%ld: %s: update_ddb_entry failed "
"for fw_ddb_index %d.\n",
ha->host_no, __func__, fw_ddb_index));
- return QLA_ERROR;
+ goto exit_build_ddb_list;
}
next_one:
break;
}
+ status = QLA_SUCCESS;
dev_info(&ha->pdev->dev, "DDB list done..\n");
+exit_build_ddb_list:
+ dma_free_coherent(&ha->pdev->dev, sizeof(*fw_ddb_entry), fw_ddb_entry,
+ fw_ddb_entry_dma);
+
+exit_build_ddb_list_no_free:
return status;
}
if (init_fw_cb == NULL) {
DEBUG2(printk("scsi%ld: %s: Unable to alloc init_cb\n",
ha->host_no, __func__));
- return 10;
+ goto exit_init_fw_cb_no_free;
}
memset(init_fw_cb, 0, sizeof(struct addr_ctrl_blk));
exit_init_fw_cb:
dma_free_coherent(&ha->pdev->dev, sizeof(struct addr_ctrl_blk),
init_fw_cb, init_fw_cb_dma);
-
+exit_init_fw_cb_no_free:
return status;
}
if (init_fw_cb == NULL) {
printk("scsi%ld: %s: Unable to alloc init_cb\n", ha->host_no,
__func__);
- return 10;
+ return QLA_ERROR;
}
/* Get Initialize Firmware Control Block. */
DEBUG2(printk("scsi%ld: %s: Unable to allocate dma buffer.\n",
ha->host_no, __func__));
ret_val = QLA_ERROR;
- goto qla4xxx_send_tgts_exit;
+ goto exit_send_tgts_no_free;
}
ret_val = qla4xxx_get_default_ddb(ha, fw_ddb_entry_dma);
if (ret_val != QLA_SUCCESS)
- goto qla4xxx_send_tgts_exit;
+ goto exit_send_tgts;
ret_val = qla4xxx_req_ddb_entry(ha, &ddb_index);
if (ret_val != QLA_SUCCESS)
- goto qla4xxx_send_tgts_exit;
+ goto exit_send_tgts;
memset(fw_ddb_entry->iscsi_alias, 0,
sizeof(fw_ddb_entry->iscsi_alias));
ret_val = qla4xxx_set_ddb_entry(ha, ddb_index, fw_ddb_entry_dma);
-qla4xxx_send_tgts_exit:
+exit_send_tgts:
dma_free_coherent(&ha->pdev->dev, sizeof(*fw_ddb_entry),
fw_ddb_entry, fw_ddb_entry_dma);
+exit_send_tgts_no_free:
return ret_val;
}