ide: remove IDE devices from /proc/ide/ before unregistering them
IDE devices need to be removed from /proc/ide/ _before_ being unregistered: * Drop 'ide_hwif_t *hwif' argument from destroy_proc_ide_device() and use drive->hwif instead. * Rename destroy_proc_ide_device() to ide_proc_unregister_device(). * Call ide_proc_unregister_device() in drive_release_dev(). * Remove no longer needed destroy_proc_ide_drives(). Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
c7f6f21aae
commit
5b0c4b30a6
@ -1199,6 +1199,8 @@ static void drive_release_dev (struct device *dev)
|
|||||||
{
|
{
|
||||||
ide_drive_t *drive = container_of(dev, ide_drive_t, gendev);
|
ide_drive_t *drive = container_of(dev, ide_drive_t, gendev);
|
||||||
|
|
||||||
|
ide_proc_unregister_device(drive);
|
||||||
|
|
||||||
spin_lock_irq(&ide_lock);
|
spin_lock_irq(&ide_lock);
|
||||||
ide_remove_drive_from_hwgroup(drive);
|
ide_remove_drive_from_hwgroup(drive);
|
||||||
kfree(drive->id);
|
kfree(drive->id);
|
||||||
|
@ -764,27 +764,16 @@ void ide_proc_port_register_devices(ide_hwif_t *hwif)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void destroy_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive)
|
void ide_proc_unregister_device(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
if (drive->proc) {
|
if (drive->proc) {
|
||||||
ide_remove_proc_entries(drive->proc, generic_drive_entries);
|
ide_remove_proc_entries(drive->proc, generic_drive_entries);
|
||||||
remove_proc_entry(drive->name, proc_ide_root);
|
remove_proc_entry(drive->name, proc_ide_root);
|
||||||
remove_proc_entry(drive->name, hwif->proc);
|
remove_proc_entry(drive->name, drive->hwif->proc);
|
||||||
drive->proc = NULL;
|
drive->proc = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void destroy_proc_ide_drives(ide_hwif_t *hwif)
|
|
||||||
{
|
|
||||||
int d;
|
|
||||||
|
|
||||||
for (d = 0; d < MAX_DRIVES; d++) {
|
|
||||||
ide_drive_t *drive = &hwif->drives[d];
|
|
||||||
if (drive->proc)
|
|
||||||
destroy_proc_ide_device(hwif, drive);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static ide_proc_entry_t hwif_entries[] = {
|
static ide_proc_entry_t hwif_entries[] = {
|
||||||
{ "channel", S_IFREG|S_IRUGO, proc_ide_read_channel, NULL },
|
{ "channel", S_IFREG|S_IRUGO, proc_ide_read_channel, NULL },
|
||||||
{ "mate", S_IFREG|S_IRUGO, proc_ide_read_mate, NULL },
|
{ "mate", S_IFREG|S_IRUGO, proc_ide_read_mate, NULL },
|
||||||
@ -816,7 +805,6 @@ EXPORT_SYMBOL_GPL(ide_pci_create_host_proc);
|
|||||||
void ide_proc_unregister_port(ide_hwif_t *hwif)
|
void ide_proc_unregister_port(ide_hwif_t *hwif)
|
||||||
{
|
{
|
||||||
if (hwif->proc) {
|
if (hwif->proc) {
|
||||||
destroy_proc_ide_drives(hwif);
|
|
||||||
ide_remove_proc_entries(hwif->proc, hwif_entries);
|
ide_remove_proc_entries(hwif->proc, hwif_entries);
|
||||||
remove_proc_entry(hwif->name, proc_ide_root);
|
remove_proc_entry(hwif->name, proc_ide_root);
|
||||||
hwif->proc = NULL;
|
hwif->proc = NULL;
|
||||||
|
@ -690,6 +690,7 @@ void proc_ide_create(void);
|
|||||||
void proc_ide_destroy(void);
|
void proc_ide_destroy(void);
|
||||||
void ide_proc_register_port(ide_hwif_t *);
|
void ide_proc_register_port(ide_hwif_t *);
|
||||||
void ide_proc_port_register_devices(ide_hwif_t *);
|
void ide_proc_port_register_devices(ide_hwif_t *);
|
||||||
|
void ide_proc_unregister_device(ide_drive_t *);
|
||||||
void ide_proc_unregister_port(ide_hwif_t *);
|
void ide_proc_unregister_port(ide_hwif_t *);
|
||||||
void ide_proc_register_driver(ide_drive_t *, ide_driver_t *);
|
void ide_proc_register_driver(ide_drive_t *, ide_driver_t *);
|
||||||
void ide_proc_unregister_driver(ide_drive_t *, ide_driver_t *);
|
void ide_proc_unregister_driver(ide_drive_t *, ide_driver_t *);
|
||||||
@ -723,6 +724,7 @@ static inline void proc_ide_create(void) { ; }
|
|||||||
static inline void proc_ide_destroy(void) { ; }
|
static inline void proc_ide_destroy(void) { ; }
|
||||||
static inline void ide_proc_register_port(ide_hwif_t *hwif) { ; }
|
static inline void ide_proc_register_port(ide_hwif_t *hwif) { ; }
|
||||||
static inline void ide_proc_port_register_devices(ide_hwif_t *hwif) { ; }
|
static inline void ide_proc_port_register_devices(ide_hwif_t *hwif) { ; }
|
||||||
|
static inline void ide_proc_unregister_device(ide_drive_t *drive) { ; }
|
||||||
static inline void ide_proc_unregister_port(ide_hwif_t *hwif) { ; }
|
static inline void ide_proc_unregister_port(ide_hwif_t *hwif) { ; }
|
||||||
static inline void ide_proc_register_driver(ide_drive_t *drive, ide_driver_t *driver) { ; }
|
static inline void ide_proc_register_driver(ide_drive_t *drive, ide_driver_t *driver) { ; }
|
||||||
static inline void ide_proc_unregister_driver(ide_drive_t *drive, ide_driver_t *driver) { ; }
|
static inline void ide_proc_unregister_driver(ide_drive_t *drive, ide_driver_t *driver) { ; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user