lkml.org 
[lkml]   [2006]   [Jun]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRE: [PATCH 1/7] CCISS: disable device when returning failure
    Date
    From


    > -----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/

    \
     
     \ /
      Last update: 2006-06-15 16:36    [W:0.028 / U:0.272 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site