ata: ahci_platform: fix owner module reference mismatch for scsi host
The owner module reference of the ahci platform's scsi_host is initialized to libahci_platform's one, because these drivers use a scsi_host_template defined in libahci_platform. So these drivers can be unloaded even if the scsi device is being accessed. This fixes it by pushing the scsi_host_template from libahci_platform to all leaf drivers. The scsi_host_template is passed through a new argument of ahci_platform_init_host(). Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Hans de Goede <hdegoede@redhat.com> Cc: Christoph Hellwig <hch@lst.de> Cc: "James E.J. Bottomley" <JBottomley@parallels.com> Cc: linux-ide@vger.kernel.org Cc: linux-scsi@vger.kernel.org
这个提交包含在:
@@ -19,6 +19,8 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include "ahci.h"
|
||||
|
||||
#define DRV_NAME "ahci-mvebu"
|
||||
|
||||
#define AHCI_VENDOR_SPECIFIC_0_ADDR 0xa0
|
||||
#define AHCI_VENDOR_SPECIFIC_0_DATA 0xa4
|
||||
|
||||
@@ -67,6 +69,10 @@ static const struct ata_port_info ahci_mvebu_port_info = {
|
||||
.port_ops = &ahci_platform_ops,
|
||||
};
|
||||
|
||||
static struct scsi_host_template ahci_platform_sht = {
|
||||
AHCI_SHT(DRV_NAME),
|
||||
};
|
||||
|
||||
static int ahci_mvebu_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct ahci_host_priv *hpriv;
|
||||
@@ -88,7 +94,8 @@ static int ahci_mvebu_probe(struct platform_device *pdev)
|
||||
ahci_mvebu_mbus_config(hpriv, dram);
|
||||
ahci_mvebu_regret_option(hpriv);
|
||||
|
||||
rc = ahci_platform_init_host(pdev, hpriv, &ahci_mvebu_port_info);
|
||||
rc = ahci_platform_init_host(pdev, hpriv, &ahci_mvebu_port_info,
|
||||
&ahci_platform_sht);
|
||||
if (rc)
|
||||
goto disable_resources;
|
||||
|
||||
@@ -114,7 +121,7 @@ static struct platform_driver ahci_mvebu_driver = {
|
||||
.probe = ahci_mvebu_probe,
|
||||
.remove = ata_platform_remove_one,
|
||||
.driver = {
|
||||
.name = "ahci-mvebu",
|
||||
.name = DRV_NAME,
|
||||
.of_match_table = ahci_mvebu_of_match,
|
||||
},
|
||||
};
|
||||
|
在新工单中引用
屏蔽一个用户