On 11/01/2011 11:46 AM, Tomas Henzl wrote: > From: Tomas Henzl <thenzl@xxxxxxxxxx> > > 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@xxxxxxxxxx> > > diff --git a/drivers/scsi/qla4xxx/ql4_init.c b/drivers/scsi/qla4xxx/ql4_init.c > index 3075fba..17acb17 100644 > --- a/drivers/scsi/qla4xxx/ql4_init.c > +++ b/drivers/scsi/qla4xxx/ql4_init.c > @@ -787,8 +787,10 @@ static void qla4xxx_free_ddb_index(struct scsi_qla_host *ha) > ret = qla4xxx_get_fwddb_entry(ha, idx, NULL, 0, NULL, > &next_idx, &state, &conn_err, > NULL, NULL); > - if (ret == QLA_ERROR) > + if (ret == QLA_ERROR) { > + next_idx++; > continue; > + } > if (state == DDB_DS_NO_CONNECTION_ACTIVE || > state == DDB_DS_SESSION_FAILED) { > DEBUG2(ql4_printk(KERN_INFO, ha, Patch looks correct. James, this is a patch for something that is not yet upstream. I will just merge this patch with the patch I was going to send upstream, so do not worry about it. -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html