diff options
author | Tejun Heo <htejun@gmail.com> | 2010-09-21 09:25:48 +0200 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2010-09-28 21:14:51 +0200 |
commit | fad16e7a7f67eef8d33f8ad58850db89382b09ce (patch) | |
tree | 09afb3e939cd4cc85e6aec76965c16fcc03c5798 /drivers/ata/ahci_platform.c | |
parent | Merge branch 'x86/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/ti... (diff) | |
download | linux-fad16e7a7f67eef8d33f8ad58850db89382b09ce.tar.xz linux-fad16e7a7f67eef8d33f8ad58850db89382b09ce.zip |
ahci: fix module refcount breakage introduced by libahci split
libata depends on scsi_host_template for module reference counting and
sht's should be owned by each low level driver. During libahci split,
the sht was left with libahci.ko leaving the actual low level drivers
not reference counted. This made ahci and ahci_platform always
unloadable even while they're being actively used.
Fix it by defining AHCI_SHT() macro in ahci.h and defining a sht for
each low level ahci driver.
stable: only applicable to 2.6.35.
Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Pedro Francisco <pedrogfrancisco@gmail.com>
Tested-by: Michael Tokarev <mjt@tls.msk.ru>
Cc: stable@kernel.org
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata/ahci_platform.c')
-rw-r--r-- | drivers/ata/ahci_platform.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index 4e97f33cca44..84b643270e7a 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c @@ -23,6 +23,10 @@ #include <linux/ahci_platform.h> #include "ahci.h" +static struct scsi_host_template ahci_platform_sht = { + AHCI_SHT("ahci_platform"), +}; + static int __init ahci_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -145,7 +149,7 @@ static int __init ahci_probe(struct platform_device *pdev) ahci_print_info(host, "platform"); rc = ata_host_activate(host, irq, ahci_interrupt, IRQF_SHARED, - &ahci_sht); + &ahci_platform_sht); if (rc) goto err0; |