aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-04-17 18:46:22 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-04-17 18:46:22 -0400
commit5b0c4b30a625927340a3e7f565aa4de8b60489cc (patch)
treeeb1dabd30fa6dd6c2ce45bbe59da9cf4cc6adc57 /drivers/ide
parentc7f6f21aaeb826a9b04b5897a92f29226995170f (diff)
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>
Diffstat (limited to 'drivers/ide')
-rw-r--r--drivers/ide/ide-probe.c2
-rw-r--r--drivers/ide/ide-proc.c16
2 files changed, 4 insertions, 14 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index 9db8978ad394..dea314ce33d3 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -1199,6 +1199,8 @@ static void drive_release_dev (struct device *dev)
1199{ 1199{
1200 ide_drive_t *drive = container_of(dev, ide_drive_t, gendev); 1200 ide_drive_t *drive = container_of(dev, ide_drive_t, gendev);
1201 1201
1202 ide_proc_unregister_device(drive);
1203
1202 spin_lock_irq(&ide_lock); 1204 spin_lock_irq(&ide_lock);
1203 ide_remove_drive_from_hwgroup(drive); 1205 ide_remove_drive_from_hwgroup(drive);
1204 kfree(drive->id); 1206 kfree(drive->id);
diff --git a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c
index bab88ca7f7ec..77025d1057b5 100644
--- a/drivers/ide/ide-proc.c
+++ b/drivers/ide/ide-proc.c
@@ -764,27 +764,16 @@ void ide_proc_port_register_devices(ide_hwif_t *hwif)
764 } 764 }
765} 765}
766 766
767static void destroy_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive) 767void ide_proc_unregister_device(ide_drive_t *drive)
768{ 768{
769 if (drive->proc) { 769 if (drive->proc) {
770 ide_remove_proc_entries(drive->proc, generic_drive_entries); 770 ide_remove_proc_entries(drive->proc, generic_drive_entries);
771 remove_proc_entry(drive->name, proc_ide_root); 771 remove_proc_entry(drive->name, proc_ide_root);
772 remove_proc_entry(drive->name, hwif->proc); 772 remove_proc_entry(drive->name, drive->hwif->proc);
773 drive->proc = NULL; 773 drive->proc = NULL;
774 } 774 }
775} 775}
776 776
777static void destroy_proc_ide_drives(ide_hwif_t *hwif)
778{
779 int d;
780
781 for (d = 0; d < MAX_DRIVES; d++) {
782 ide_drive_t *drive = &hwif->drives[d];
783 if (drive->proc)
784 destroy_proc_ide_device(hwif, drive);
785 }
786}
787
788static ide_proc_entry_t hwif_entries[] = { 777static ide_proc_entry_t hwif_entries[] = {
789 { "channel", S_IFREG|S_IRUGO, proc_ide_read_channel, NULL }, 778 { "channel", S_IFREG|S_IRUGO, proc_ide_read_channel, NULL },
790 { "mate", S_IFREG|S_IRUGO, proc_ide_read_mate, NULL }, 779 { "mate", S_IFREG|S_IRUGO, proc_ide_read_mate, NULL },
@@ -816,7 +805,6 @@ EXPORT_SYMBOL_GPL(ide_pci_create_host_proc);
816void ide_proc_unregister_port(ide_hwif_t *hwif) 805void ide_proc_unregister_port(ide_hwif_t *hwif)
817{ 806{
818 if (hwif->proc) { 807 if (hwif->proc) {
819 destroy_proc_ide_drives(hwif);
820 ide_remove_proc_entries(hwif->proc, hwif_entries); 808 ide_remove_proc_entries(hwif->proc, hwif_entries);
821 remove_proc_entry(hwif->name, proc_ide_root); 809 remove_proc_entry(hwif->name, proc_ide_root);
822 hwif->proc = NULL; 810 hwif->proc = NULL;