|
@@ -1004,6 +1004,7 @@ qla4xxx_session_create(struct iscsi_endpoint *ep,
|
|
|
qla_ep = ep->dd_data;
|
|
|
dst_addr = (struct sockaddr *)&qla_ep->dst_addr;
|
|
|
ha = to_qla_host(qla_ep->host);
|
|
|
+
|
|
|
get_ddb_index:
|
|
|
ddb_index = find_first_zero_bit(ha->ddb_idx_map, MAX_DDB_ENTRIES);
|
|
|
|
|
@@ -1063,6 +1064,8 @@ static void qla4xxx_session_destroy(struct iscsi_cls_session *cls_sess)
|
|
|
ddb_entry = sess->dd_data;
|
|
|
ha = ddb_entry->ha;
|
|
|
|
|
|
+ qla4xxx_clear_ddb_entry(ha, ddb_entry->fw_ddb_index);
|
|
|
+
|
|
|
spin_lock_irqsave(&ha->hardware_lock, flags);
|
|
|
qla4xxx_free_ddb(ha, ddb_entry);
|
|
|
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
|
@@ -1183,14 +1186,6 @@ static void qla4xxx_conn_destroy(struct iscsi_cls_conn *cls_conn)
|
|
|
options = LOGOUT_OPTION_CLOSE_SESSION;
|
|
|
if (qla4xxx_session_logout_ddb(ha, ddb_entry, options) == QLA_ERROR)
|
|
|
ql4_printk(KERN_ERR, ha, "%s: Logout failed\n", __func__);
|
|
|
- else
|
|
|
- qla4xxx_clear_ddb_entry(ha, ddb_entry->fw_ddb_index);
|
|
|
-
|
|
|
- /*
|
|
|
- * Clear the DDB bit so that next login can use the bit
|
|
|
- * if FW is not clearing the DDB entry then set DDB will fail anyways
|
|
|
- */
|
|
|
- clear_bit(ddb_entry->fw_ddb_index, ha->ddb_idx_map);
|
|
|
}
|
|
|
|
|
|
static void qla4xxx_task_work(struct work_struct *wdata)
|