On 17/01/14 2:00 PM, "Mike Christie" <[email protected]> wrote:
>
>> +static void qla4xxx_destroy_ddb(struct scsi_qla_host *ha,
>> + struct ddb_entry *ddb_entry)
>> +{
>> + struct dev_db_entry *fw_ddb_entry = NULL;
>> + dma_addr_t fw_ddb_entry_dma;
>> + unsigned long wtime;
>> + uint32_t ddb_state;
>> + int options;
>> + int status;
>> +
>> + 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__);
>> + goto clear_ddb;
>> + }
>> +
>> + fw_ddb_entry = dma_alloc_coherent(&ha->pdev->dev,
>>sizeof(*fw_ddb_entry),
>> + &fw_ddb_entry_dma, GFP_KERNEL);
>> + if (!fw_ddb_entry) {
>> + ql4_printk(KERN_ERR, ha,
>> + "%s: Unable to allocate dma buffer\n", __func__);
>> + goto clear_ddb;
>> + }
>> +
>> + wtime = jiffies + (HZ * LOGOUT_TOV);
>> + do {
>> + status = qla4xxx_get_fwddb_entry(ha, ddb_entry->fw_ddb_index,
>> + fw_ddb_entry, fw_ddb_entry_dma,
>> + NULL, NULL, &ddb_state, NULL,
>> + NULL, NULL);
>> + if (status == QLA_ERROR)
>> + goto clear_ddb;
>> +
>> + if ((ddb_state == DDB_DS_NO_CONNECTION_ACTIVE) ||
>> + (ddb_state == DDB_DS_SESSION_FAILED))
>> + goto clear_ddb;
>> +
>> + schedule_timeout_uninterruptible(HZ);
>> + } while ((time_after(wtime, jiffies)));
>
>
>I think there is a missing dma_free_coherent
>
>> +
>> +clear_ddb:
>> + qla4xxx_clear_ddb_entry(ha, ddb_entry->fw_ddb_index);
>> + return;
>> +}
>> +
>
>Don't need return statement there.
Thanks a lot for review.
Updated patch is posted here:-
http://marc.info/?l=linux-scsi&m=138995390232212&w=2
Thanks,
Vikas.
<<attachment: winmail.dat>>

