The following commit changed the pointer passed to request_irq(), but
failed to change the pointer passed to free_irq():
commit 
99c9e0a1d6cfe1ba1169a7a81435ee85bc00e4a1
Author: Matthew Wilcox <matthew@wil.cx>
Date:   Fri Oct 5 15:55:12 2007 -0400
    [SCSI] sym53c8xx: Make interrupt handler capable of returning IRQ_NONE
    ...
The result is that free_irq() doesn't actually take any action.  This
patch fixes it.
Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
Acked-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
         *  Free O/S specific resources.
         */
        if (pdev->irq)
-               free_irq(pdev->irq, np);
+               free_irq(pdev->irq, np->s.host);
        if (np->s.ioaddr)
                pci_iounmap(pdev, np->s.ioaddr);
        if (np->s.ramaddr)