projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
7977f82
)
[SCSI] qla4xxx: Fix panic while rmmod
author
Vikas Chaudhary
<vikas.chaudhary@qlogic.com>
Thu, 20 Sep 2012 11:35:08 +0000
(07:35 -0400)
committer
James Bottomley
<JBottomley@Parallels.com>
Mon, 24 Sep 2012 08:40:47 +0000
(12:40 +0400)
Issue:
System panic on rmmod if probe_adapter had failed during driver load.
Call Trace:
[<
ffffffffa071aa5a
>] qla4xxx_abort_active_cmds+0x4a/0xa0 [qla4xxx]
[<
ffffffffa07224db
>] qla4xxx_free_adapter+0x1b/0x1b0 [qla4xxx]
[<
ffffffffa073991f
>] qla4xxx_remove_adapter+0x294/0x2c7 [qla4xxx]
[<
ffffffff812930b7
>] pci_device_remove+0x37/0x70
[<
ffffffff8135006f
>] __device_release_driver+0x6f/0xe0
[<
ffffffff813501a8
>] driver_detach+0xc8/0xd0
[<
ffffffff8134ef0e
>] bus_remove_driver+0x8e/0x110
[<
ffffffff81350972
>] driver_unregister+0x62/0xa0
[<
ffffffff812933c4
>] pci_unregister_driver+0x44/0xb0
[<
ffffffffa0739659
>] qla4xxx_module_exit+0x15/0x47 [qla4xxx]
[<
ffffffff810addd4
>] sys_delete_module+0x194/0x260
[<
ffffffff8150326e
>] ? do_page_fault+0x3e/0xa0
[<
ffffffff8100b0f2
>] system_call_fastpath+0x16/0x1b
Fix:
Do not cleanup resources on remove_adapter as they are cleaned up during
probe_adapter exit.
Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/qla4xxx/ql4_os.c
patch
|
blob
|
history
diff --git
a/drivers/scsi/qla4xxx/ql4_os.c
b/drivers/scsi/qla4xxx/ql4_os.c
index 29bd2258ab6f1f0e37dcf9550146cbfe76c46902..97ce44bb1ce9678f62e4f26c0b821e501bf7785f 100644
(file)
--- a/
drivers/scsi/qla4xxx/ql4_os.c
+++ b/
drivers/scsi/qla4xxx/ql4_os.c
@@
-5449,6
+5449,13
@@
static void __devexit qla4xxx_remove_adapter(struct pci_dev *pdev)
{
struct scsi_qla_host *ha;
+ /*
+ * If the PCI device is disabled then it means probe_adapter had
+ * failed and resources already cleaned up on probe_adapter exit.
+ */
+ if (!pci_is_enabled(pdev))
+ return;
+
ha = pci_get_drvdata(pdev);
if (is_qla40XX(ha))