[SCSI] qla4xxx: a small loop fix
When the qla4xxx_get_fwddb_entry returns QLA_ERROR the nex_idx is not updated, for (idx = 0; idx < max_ddbs; idx = next_idx) { ret = qla4xxx_get_fwddb_entry(ha, idx, NULL, 0, NULL, &next_idx, &state, &conn_err, NULL, NULL); if (ret == QLA_ERROR) continue; This means there is a risk that the 'idx < max_ddbs' condition will never met and the loop will loop forever. Fix this by explicitly increasing the next_idx in the error condition. Maybe a break instead of continue is more appropriate, leaving the decision on the qlogic maintainer. Signed-off-by: Tomas Henzl <thenzl@redhat.com> Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
13483730a1
commit
e1cd89c507
|
@ -787,8 +787,10 @@ void qla4xxx_free_ddb_index(struct scsi_qla_host *ha)
|
||||||
ret = qla4xxx_get_fwddb_entry(ha, idx, NULL, 0, NULL,
|
ret = qla4xxx_get_fwddb_entry(ha, idx, NULL, 0, NULL,
|
||||||
&next_idx, &state, &conn_err,
|
&next_idx, &state, &conn_err,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
if (ret == QLA_ERROR)
|
if (ret == QLA_ERROR) {
|
||||||
|
next_idx++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (state == DDB_DS_NO_CONNECTION_ACTIVE ||
|
if (state == DDB_DS_NO_CONNECTION_ACTIVE ||
|
||||||
state == DDB_DS_SESSION_FAILED) {
|
state == DDB_DS_SESSION_FAILED) {
|
||||||
DEBUG2(ql4_printk(KERN_INFO, ha,
|
DEBUG2(ql4_printk(KERN_INFO, ha,
|
||||||
|
|
Loading…
Reference in New Issue