[SCSI] lpfc 8.1.7 : Short bug fixes
Short bug fixes: - Fix iocbq list corruption due to missing list_del's in ct handling - Missing unlock in lpfc_sli_next_iotag() - Fix initialization of can_queue value - Differentiate sysfs mailbox errors with different codes. Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
1c067a4241
commit
8f6d98d2e0
4 changed files with 18 additions and 6 deletions
|
@ -884,7 +884,7 @@ sysfs_mbox_write(struct kobject *kobj, char *buf, loff_t off, size_t count)
|
|||
phba->sysfs_mbox.mbox == NULL ) {
|
||||
sysfs_mbox_idle(phba);
|
||||
spin_unlock_irq(host->host_lock);
|
||||
return -EINVAL;
|
||||
return -EAGAIN;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1008,7 +1008,7 @@ sysfs_mbox_read(struct kobject *kobj, char *buf, loff_t off, size_t count)
|
|||
if (rc != MBX_SUCCESS) {
|
||||
sysfs_mbox_idle(phba);
|
||||
spin_unlock_irq(host->host_lock);
|
||||
return -ENODEV;
|
||||
return (rc == MBX_TIMEOUT) ? -ETIME : -ENODEV;
|
||||
}
|
||||
phba->sysfs_mbox.state = SMBOX_READING;
|
||||
}
|
||||
|
@ -1017,7 +1017,7 @@ sysfs_mbox_read(struct kobject *kobj, char *buf, loff_t off, size_t count)
|
|||
printk(KERN_WARNING "mbox_read: Bad State\n");
|
||||
sysfs_mbox_idle(phba);
|
||||
spin_unlock_irq(host->host_lock);
|
||||
return -EINVAL;
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
memcpy(buf, (uint8_t *) & phba->sysfs_mbox.mbox->mb + off, count);
|
||||
|
|
|
@ -131,6 +131,7 @@ lpfc_ct_unsol_event(struct lpfc_hba * phba,
|
|||
}
|
||||
|
||||
ct_unsol_event_exit_piocbq:
|
||||
list_del(&head);
|
||||
if (pmbuf) {
|
||||
list_for_each_entry_safe(matp, next_matp, &pmbuf->list, list) {
|
||||
lpfc_mbuf_free(phba, matp->virt, matp->phys);
|
||||
|
|
|
@ -1616,7 +1616,11 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
|
|||
goto out_free_iocbq;
|
||||
}
|
||||
|
||||
/* We can rely on a queue depth attribute only after SLI HBA setup */
|
||||
/*
|
||||
* Set initial can_queue value since 0 is no longer supported and
|
||||
* scsi_add_host will fail. This will be adjusted later based on the
|
||||
* max xri value determined in hba setup.
|
||||
*/
|
||||
host->can_queue = phba->cfg_hba_queue_depth - 10;
|
||||
|
||||
/* Tell the midlayer we support 16 byte commands */
|
||||
|
@ -1656,6 +1660,12 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
|
|||
goto out_free_irq;
|
||||
}
|
||||
|
||||
/*
|
||||
* hba setup may have changed the hba_queue_depth so we need to adjust
|
||||
* the value of can_queue.
|
||||
*/
|
||||
host->can_queue = phba->cfg_hba_queue_depth - 10;
|
||||
|
||||
lpfc_discovery_wait(phba);
|
||||
|
||||
if (phba->cfg_poll & DISABLE_FCP_RING_INT) {
|
||||
|
|
|
@ -320,7 +320,8 @@ lpfc_sli_next_iotag(struct lpfc_hba * phba, struct lpfc_iocbq * iocbq)
|
|||
kfree(old_arr);
|
||||
return iotag;
|
||||
}
|
||||
}
|
||||
} else
|
||||
spin_unlock_irq(phba->host->host_lock);
|
||||
|
||||
lpfc_printf_log(phba, KERN_ERR,LOG_SLI,
|
||||
"%d:0318 Failed to allocate IOTAG.last IOTAG is %d\n",
|
||||
|
@ -1399,11 +1400,11 @@ lpfc_sli_handle_slow_ring_event(struct lpfc_hba * phba,
|
|||
next_iocb,
|
||||
&saveq->list,
|
||||
list) {
|
||||
list_del(&rspiocbp->list);
|
||||
lpfc_sli_release_iocbq(phba,
|
||||
rspiocbp);
|
||||
}
|
||||
}
|
||||
|
||||
lpfc_sli_release_iocbq(phba, saveq);
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue