Commit a2f5bfcf711aa72ad5587b533a1909334c2533a4
Committed by
James Bottomley
1 parent
c59c61493f
Exists in
master
and in
7 other branches
[SCSI] aic7xxx: leaves timer running on init failure
aic79xx leaves timers inserted when ahd_init() (which inserts two timers at its very end) succeeds but ahd_pci_map_int() fails. In this case ahd->init_level gets incremented to 5 only when that function succeeds, but ahd_free() calls ahd_shutdown() only when ahd->init_level == 5, and ahd_shutdown() is where the timers get removed. Since the freeing of the IRQ is not controlled by ahd->init_level, we should increment init_level prior to calling ahd_pci_map_int(). Reported-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Showing 2 changed files with 4 additions and 10 deletions Side-by-side Diff
drivers/scsi/aic7xxx/aic79xx_pci.c
... | ... | @@ -377,14 +377,12 @@ |
377 | 377 | error = ahd_init(ahd); |
378 | 378 | if (error != 0) |
379 | 379 | return (error); |
380 | + ahd->init_level++; | |
380 | 381 | |
381 | 382 | /* |
382 | 383 | * Allow interrupts now that we are completely setup. |
383 | 384 | */ |
384 | - error = ahd_pci_map_int(ahd); | |
385 | - if (!error) | |
386 | - ahd->init_level++; | |
387 | - return error; | |
385 | + return ahd_pci_map_int(ahd); | |
388 | 386 | } |
389 | 387 | |
390 | 388 | #ifdef CONFIG_PM |
drivers/scsi/aic7xxx/aic7xxx_pci.c
... | ... | @@ -960,16 +960,12 @@ |
960 | 960 | error = ahc_init(ahc); |
961 | 961 | if (error != 0) |
962 | 962 | return (error); |
963 | + ahc->init_level++; | |
963 | 964 | |
964 | 965 | /* |
965 | 966 | * Allow interrupts now that we are completely setup. |
966 | 967 | */ |
967 | - error = ahc_pci_map_int(ahc); | |
968 | - if (error != 0) | |
969 | - return (error); | |
970 | - | |
971 | - ahc->init_level++; | |
972 | - return (0); | |
968 | + return ahc_pci_map_int(ahc); | |
973 | 969 | } |
974 | 970 | |
975 | 971 | /* |