Messages in this thread | | | Subject | RE: [PATCH 1/7] CCISS: disable device when returning failure | Date | Thu, 15 Jun 2006 09:32:58 -0500 | From | "Miller, Mike (OS Dev)" <> |
| |
> -----Original Message----- > From: Helgaas, Bjorn > Sent: Wednesday, June 14, 2006 6:09 PM > To: Miller, Mike (OS Dev) > Cc: ISS StorageDev; linux-kernel@vger.kernel.org; Andrew Morton > Subject: [PATCH 1/7] CCISS: disable device when returning failure > > If something fails after we call pci_enable_device(), we should call > pci_disable_device() before returning the failure. > > Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-by: Mike Miller <mike.miller@hp.com>
> > Index: rc5-mm3/drivers/block/cciss.c > =================================================================== > --- rc5-mm3.orig/drivers/block/cciss.c 2006-06-14 > 14:29:40.000000000 -0600 > +++ rc5-mm3/drivers/block/cciss.c 2006-06-14 > 14:36:03.000000000 -0600 > @@ -2744,7 +2744,7 @@ > __u64 cfg_offset; > __u32 cfg_base_addr; > __u64 cfg_base_addr_index; > - int i; > + int i, err; > > /* check to see if controller has been disabled */ > /* BEFORE trying to enable it */ > @@ -2752,13 +2752,14 @@ > if(!(command & 0x02)) > { > printk(KERN_WARNING "cciss: controller appears > to be disabled\n"); > - return(-1); > + return -ENODEV; > } > > - if (pci_enable_device(pdev)) > + err = pci_enable_device(pdev); > + if (err) > { > printk(KERN_ERR "cciss: Unable to Enable PCI device\n"); > - return( -1); > + return err; > } > > subsystem_vendor_id = pdev->subsystem_vendor; @@ > -2824,7 +2825,8 @@ > } > if (scratchpad != CCISS_FIRMWARE_READY) { > printk(KERN_WARNING "cciss: Board not ready. > Timed out.\n"); > - return -1; > + err = -ENODEV; > + goto err_out_disable_pdev; > } > > /* get the address index number */ > @@ -2841,7 +2843,8 @@ > if (cfg_base_addr_index == -1) { > printk(KERN_WARNING "cciss: Cannot find > cfg_base_addr_index\n"); > release_io_mem(c); > - return -1; > + err = -ENODEV; > + goto err_out_disable_pdev; > } > > cfg_offset = readl(c->vaddr + SA5_CTMEM_OFFSET); @@ > -2868,7 +2871,8 @@ > printk(KERN_WARNING "cciss: Sorry, I don't know how" > " to access the Smart Array controller > %08lx\n", > (unsigned long)board_id); > - return -1; > + err = -ENODEV; > + goto err_out_disable_pdev; > } > if ( (readb(&c->cfgtable->Signature[0]) != 'C') || > (readb(&c->cfgtable->Signature[1]) != 'I') || @@ > -2876,7 +2880,8 @@ > (readb(&c->cfgtable->Signature[3]) != 'S') ) > { > printk("Does not appear to be a valid CISS > config table\n"); > - return -1; > + err = -ENODEV; > + goto err_out_disable_pdev; > } > > #ifdef CONFIG_X86 > @@ -2920,10 +2925,14 @@ > { > printk(KERN_WARNING "cciss: unable to get board into" > " simple mode\n"); > - return -1; > + err = -ENODEV; > + goto err_out_disable_pdev; > } > return 0; > > +err_out_disable_pdev: > + pci_disable_device(pdev); > + return err; > } > > /* > - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |