mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
ata: ahci: Clean up sysfs file on error
commiteeb25a09c5
upstream. .probe() (ahci_init_one()) calls sysfs_add_file_to_group(), however, if probe() fails after this call, we currently never call sysfs_remove_file_from_group(). (The sysfs_remove_file_from_group() call in .remove() (ahci_remove_one()) does not help, as .remove() is not called on .probe() error.) Thus, if probe() fails after the sysfs_add_file_to_group() call, the next time we insmod the module we will get: sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:04.0/remapped_nvme' CPU: 11 PID: 954 Comm: modprobe Not tainted 6.10.0-rc5 #43 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40 04/01/2014 Call Trace: <TASK> dump_stack_lvl+0x5d/0x80 sysfs_warn_dup.cold+0x17/0x23 sysfs_add_file_mode_ns+0x11a/0x130 sysfs_add_file_to_group+0x7e/0xc0 ahci_init_one+0x31f/0xd40 [ahci] Fixes:894fba7f43
("ata: ahci: Add sysfs attribute to show remapped NVMe device count") Cc: stable@vger.kernel.org Reviewed-by: Damien Le Moal <dlemoal@kernel.org> Reviewed-by: Hannes Reinecke <hare@suse.de> Link: https://lore.kernel.org/r/20240629124210.181537-10-cassel@kernel.org Signed-off-by: Niklas Cassel <cassel@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f926c022eb
commit
5f0d0bf9f5
@ -1891,8 +1891,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||||||
n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map));
|
n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map));
|
||||||
|
|
||||||
host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
|
host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
|
||||||
if (!host)
|
if (!host) {
|
||||||
return -ENOMEM;
|
rc = -ENOMEM;
|
||||||
|
goto err_rm_sysfs_file;
|
||||||
|
}
|
||||||
host->private_data = hpriv;
|
host->private_data = hpriv;
|
||||||
|
|
||||||
if (ahci_init_msi(pdev, n_ports, hpriv) < 0) {
|
if (ahci_init_msi(pdev, n_ports, hpriv) < 0) {
|
||||||
@ -1945,11 +1947,11 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||||||
/* initialize adapter */
|
/* initialize adapter */
|
||||||
rc = ahci_configure_dma_masks(pdev, hpriv);
|
rc = ahci_configure_dma_masks(pdev, hpriv);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
goto err_rm_sysfs_file;
|
||||||
|
|
||||||
rc = ahci_pci_reset_controller(host);
|
rc = ahci_pci_reset_controller(host);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
goto err_rm_sysfs_file;
|
||||||
|
|
||||||
ahci_pci_init_controller(host);
|
ahci_pci_init_controller(host);
|
||||||
ahci_pci_print_info(host);
|
ahci_pci_print_info(host);
|
||||||
@ -1958,10 +1960,15 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||||||
|
|
||||||
rc = ahci_host_activate(host, &ahci_sht);
|
rc = ahci_host_activate(host, &ahci_sht);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
goto err_rm_sysfs_file;
|
||||||
|
|
||||||
pm_runtime_put_noidle(&pdev->dev);
|
pm_runtime_put_noidle(&pdev->dev);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err_rm_sysfs_file:
|
||||||
|
sysfs_remove_file_from_group(&pdev->dev.kobj,
|
||||||
|
&dev_attr_remapped_nvme.attr, NULL);
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ahci_shutdown_one(struct pci_dev *pdev)
|
static void ahci_shutdown_one(struct pci_dev *pdev)
|
||||||
|
Loading…
Reference in New Issue
Block a user