aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wilcox <matthew@wil.cx>2007-08-15 14:56:57 -0400
committerJames Bottomley <jejb@mulgrave.localdomain>2007-10-12 14:51:22 -0400
commit1bd405734651c9ebd1c872a452614f9fe381c673 (patch)
tree5f5e4a34ce580859f6de0adc15612f77123be6bc
parentdffe807cdbc6d2409b9bcc87a9517bb7c0d25b65 (diff)
[SCSI] aha152x: Close narrow race in release
We were releasing the IRQ before removing the host, so commands could still be coming in which would never be seen by the interrupt handler. Just remove the host before releasing the IRQ to close this race. Signed-off-by: Matthew Wilcox <matthew@wil.cx> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
-rw-r--r--drivers/scsi/aha152x.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c
index d30a30786dda..f08e71e0205a 100644
--- a/drivers/scsi/aha152x.c
+++ b/drivers/scsi/aha152x.c
@@ -907,9 +907,10 @@ out_host_put:
907 907
908void aha152x_release(struct Scsi_Host *shpnt) 908void aha152x_release(struct Scsi_Host *shpnt)
909{ 909{
910 if(!shpnt) 910 if (!shpnt)
911 return; 911 return;
912 912
913 scsi_remove_host(shpnt);
913 if (shpnt->irq) 914 if (shpnt->irq)
914 free_irq(shpnt->irq, shpnt); 915 free_irq(shpnt->irq, shpnt);
915 916
@@ -923,7 +924,6 @@ void aha152x_release(struct Scsi_Host *shpnt)
923 pnp_device_detach(HOSTDATA(shpnt)->pnpdev); 924 pnp_device_detach(HOSTDATA(shpnt)->pnpdev);
924#endif 925#endif
925 926
926 scsi_remove_host(shpnt);
927 list_del(&HOSTDATA(shpnt)->host_list); 927 list_del(&HOSTDATA(shpnt)->host_list);
928 scsi_host_put(shpnt); 928 scsi_host_put(shpnt);
929} 929}