Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 271114
b: refs/heads/master
c: 736cf36
h: refs/heads/master
v: v3
  • Loading branch information
Manish Rangankar authored and James Bottomley committed Oct 16, 2011
1 parent 14019ae commit 1550446
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 10 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 166dd20d794e7885b23c8d5fc533949ed82cc337
refs/heads/master: 736cf369c9a514a9ed596e97375c49ef1fdf920a
12 changes: 11 additions & 1 deletion trunk/drivers/scsi/qla4xxx/ql4_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -880,6 +880,10 @@ int qla4xxx_process_ddb_changed(struct scsi_qla_host *ha, uint32_t fw_ddb_index,
if (ddb_entry == NULL) {
ql4_printk(KERN_ERR, ha, "%s: No ddb_entry at FW index [%d]\n",
__func__, fw_ddb_index);

if (state == DDB_DS_NO_CONNECTION_ACTIVE)
clear_bit(fw_ddb_index, ha->ddb_idx_map);

goto exit_ddb_event;
}

Expand Down Expand Up @@ -910,7 +914,8 @@ int qla4xxx_process_ddb_changed(struct scsi_qla_host *ha, uint32_t fw_ddb_index,
}
break;
case DDB_DS_SESSION_ACTIVE:
if (state == DDB_DS_SESSION_FAILED) {
switch (state) {
case DDB_DS_SESSION_FAILED:
/*
* iscsi_session failure will cause userspace to
* stop the connection which in turn would block the
Expand All @@ -919,6 +924,11 @@ int qla4xxx_process_ddb_changed(struct scsi_qla_host *ha, uint32_t fw_ddb_index,
iscsi_session_failure(ddb_entry->sess->dd_data,
ISCSI_ERR_CONN_FAILED);
status = QLA_SUCCESS;
break;
case DDB_DS_NO_CONNECTION_ACTIVE:
clear_bit(fw_ddb_index, ha->ddb_idx_map);
status = QLA_SUCCESS;
break;
}
break;
default:
Expand Down
11 changes: 3 additions & 8 deletions trunk/drivers/scsi/qla4xxx/ql4_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 1550446

Please sign in to comment.