On Mon, May 05, 2014 at 04:47:11PM +0800, ching wrote: > +static int > +arcmsr_request_irq(struct pci_dev *pdev, struct AdapterControlBlock *acb) > +{ > + int i, j, r; > + struct msix_entry entries[ARCMST_NUM_MSIX_VECTORS]; > + > + if (!pci_find_capability(pdev, PCI_CAP_ID_MSIX)) > + goto msi_int; > + for (i = 0; i < ARCMST_NUM_MSIX_VECTORS; i++) > + entries[i].entry = i; > + r = pci_enable_msix(pdev, entries, ARCMST_NUM_MSIX_VECTORS); > + if (r < 0) > + goto msi_int; > + if (r == 0) { > + for (i = 0; i < ARCMST_NUM_MSIX_VECTORS; i++) { > + if (request_irq(entries[i].vector, > + arcmsr_do_interrupt, 0, "arcmsr", acb)) { > + pr_warn("arcmsr%d: request_irq =%d failed!\n", > + acb->host->host_no, pdev->irq); > + for (j = 0 ; j < i ; j++) > + free_irq(entries[i].vector, acb); This is a bug here. Sorry for not noticing the first time I reviewed this patch. It should be "j" instead of "i" in free_irq(entries[i].vector, acb);. > + pci_disable_msix(pdev); > + goto msi_int; > + } > + acb->entries[i] = entries[i]; > + } > + acb->acb_flags |= ACB_F_MSIX_ENABLED; > + pr_info("arcmsr%d: msi-x enabled\n", acb->host->host_no); > + return ARC_SUCCESS; > + } else { > + if (pci_enable_msix(pdev, entries, r)) > + goto msi_int; > + for (i = 0; i < r; i++) { > + if (request_irq(entries[i].vector, > + arcmsr_do_interrupt, 0, "arcmsr", acb)) { > + pr_warn("arcmsr%d: request_irq =%d failed!\n", > + acb->host->host_no, pdev->irq); > + for (j = 0 ; j < i ; j++) > + free_irq(entries[i].vector, acb); The same thing here. But otherwise so far as style goes this function is a lot better in this version. Thanks. Also the patchset is split up nicely into patches which do one thing per patch so that's nice as well. regards, dan carpenter -- 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