summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/megaraid.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 94008551f7ba..caf78b6be706 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -2572,21 +2572,15 @@ proc_pdrv(adapter_t *adapter, char *page, int channel)
}
if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
- free_local_pdev(pdev);
- return len;
+ goto free_pdev;
}
if( mega_adapinq(adapter, dma_handle) != 0 ) {
-
len = sprintf(page, "Adapter inquiry failed.\n");
printk(KERN_WARNING "megaraid: inquiry failed.\n");
- mega_free_inquiry(inquiry, dma_handle, pdev);
-
- free_local_pdev(pdev);
-
- return len;
+ goto free_inquiry;
}
@@ -2595,11 +2589,7 @@ proc_pdrv(adapter_t *adapter, char *page, int channel)
if( scsi_inq == NULL ) {
len = sprintf(page, "memory not available for scsi inq.\n");
- mega_free_inquiry(inquiry, dma_handle, pdev);
-
- free_local_pdev(pdev);
-
- return len;
+ goto free_inquiry;
}
if( adapter->flag & BOARD_40LD ) {
@@ -2612,7 +2602,9 @@ proc_pdrv(adapter_t *adapter, char *page, int channel)
max_channels = adapter->product_info.nchannels;
- if( channel >= max_channels ) return 0;
+ if( channel >= max_channels ) {
+ goto free_pci;
+ }
for( tgt = 0; tgt <= MAX_TARGET; tgt++ ) {
@@ -2677,10 +2669,11 @@ proc_pdrv(adapter_t *adapter, char *page, int channel)
len += mega_print_inquiry(page+len, scsi_inq);
}
+free_pci:
pci_free_consistent(pdev, 256, scsi_inq, scsi_inq_dma_handle);
-
+free_inquiry:
mega_free_inquiry(inquiry, dma_handle, pdev);
-
+free_pdev:
free_local_pdev(pdev);
return len;