mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-21 22:32:45 +00:00
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
This commit is contained in:
parent
cedda4c3b1
commit
018d5ef204
12 changed files with 89 additions and 23 deletions
|
@ -1338,6 +1338,12 @@ extern const struct ata_port_operations ata_base_port_ops;
|
|||
extern const struct ata_port_operations sata_port_ops;
|
||||
extern struct device_attribute *ata_common_sdev_attrs[];
|
||||
|
||||
/*
|
||||
* All sht initializers (BASE, PIO, BMDMA, NCQ) must be instantiated
|
||||
* by the edge drivers. Because the 'module' field of sht must be the
|
||||
* edge driver's module reference, otherwise the driver can be unloaded
|
||||
* even if the scsi_device is being accessed.
|
||||
*/
|
||||
#define ATA_BASE_SHT(drv_name) \
|
||||
.module = THIS_MODULE, \
|
||||
.name = drv_name, \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue