diff -Nru a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
--- a/drivers/ide/ide-probe.c Fri Apr 18 15:57:08 2003
+++ b/drivers/ide/ide-probe.c Fri Apr 18 15:57:08 2003
@@ -1289,7 +1289,6 @@
for (unit = 0; unit < MAX_DRIVES; ++unit) {
ide_drive_t * drive = &hwif->drives[unit];
- char name[64];
ide_add_generic_settings(drive);
snprintf(drive->gendev.bus_id,BUS_ID_SIZE,"%u.%u",
hwif->index,unit);
@@ -1298,13 +1297,13 @@
drive->gendev.parent = &hwif->gendev;
drive->gendev.bus = &ide_bus_type;
drive->gendev.driver_data = drive;
- sprintf (name, "ide/host%d/bus%d/target%d/lun%d",
- (hwif->channel && hwif->mate) ?
- hwif->mate->index : hwif->index,
- hwif->channel, unit, drive->lun);
if (drive->present) {
device_register(&drive->gendev);
- drive->de = devfs_mk_dir(name);
+ sprintf(drive->devfs_name, "ide/host%d/bus%d/target%d/lun%d",
+ (hwif->channel && hwif->mate) ?
+ hwif->mate->index : hwif->index,
+ hwif->channel, unit, drive->lun);
+ drive->de = devfs_mk_dir(drive->devfs_name);
}
}
blk_register_region(MKDEV(hwif->major, 0), MAX_DRIVES << PARTN_BITS,
diff -Nru a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
--- a/drivers/ide/ide-tape.c Fri Apr 18 15:57:08 2003
+++ b/drivers/ide/ide-tape.c Fri Apr 18 15:57:08 2003
@@ -866,8 +866,6 @@
*/
typedef struct {
ide_drive_t *drive;
- devfs_handle_t de_r, de_n;
-
/*
* Since a typical character device operation requires more
* than one packet command, we provide here enough memory
@@ -6170,8 +6168,8 @@
DRIVER(drive)->busy = 0;
(void) ide_unregister_subdriver(drive);
drive->driver_data = NULL;
- devfs_unregister(tape->de_r);
- devfs_unregister(tape->de_n);
+ devfs_remove("%s/mt");
+ devfs_remove("%s/mtn");
devfs_unregister_tape(drive->disk->number);
kfree (tape);
drive->disk->fops = ide_fops;
@@ -6272,6 +6270,7 @@
static int idetape_attach (ide_drive_t *drive)
{
idetape_tape_t *tape;
+ char devfs_name[64];
int minor;
if (!strstr("ide-tape", drive->driver_req))
@@ -6306,16 +6305,19 @@
;
idetape_setup(drive, tape, minor);
idetape_chrdevs[minor].drive = drive;
- tape->de_r =
- devfs_register (drive->de, "mt", DEVFS_FL_DEFAULT,
- HWIF(drive)->major, minor,
- S_IFCHR | S_IRUGO | S_IWUGO,
- &idetape_fops, NULL);
- tape->de_n =
- devfs_register (drive->de, "mtn", DEVFS_FL_DEFAULT,
- HWIF(drive)->major, minor + 128,
- S_IFCHR | S_IRUGO | S_IWUGO,
- &idetape_fops, NULL);
+
+ sprintf(devfs_name, "%s/mt", drive->devfs_name);
+ tape->de_r = devfs_register (NULL, devfs_name, 0,
+ HWIF(drive)->major, minor,
+ S_IFCHR | S_IRUGO | S_IWUGO,
+ &idetape_fops, NULL);
+
+ sprintf(devfs_name, "%s/mtn", drive->devfs_name);
+ tape->de_n = devfs_register (NULL, devfs_name, 0,
+ HWIF(drive)->major, minor + 128,
+ S_IFCHR | S_IRUGO | S_IWUGO,
+ &idetape_fops, NULL);
+
drive->disk->number = devfs_register_tape(drive->de);
drive->disk->fops = &idetape_block_ops;
return 0;
diff -Nru a/drivers/ide/ide.c b/drivers/ide/ide.c
--- a/drivers/ide/ide.c Fri Apr 18 15:57:08 2003
+++ b/drivers/ide/ide.c Fri Apr 18 15:57:08 2003
@@ -650,9 +650,9 @@
*/
for (i = 0; i < MAX_DRIVES; ++i) {
drive = &hwif->drives[i];
- if (drive->de) {
- devfs_unregister(drive->de);
- drive->de = NULL;
+ if (drive->devfs_name[0] != '\0') {
+ devfs_remove(drive->devfs_name);
+ drive->devfs_name[0] = '\0';
}
if (!drive->present)
continue;
diff -Nru a/include/linux/ide.h b/include/linux/ide.h
--- a/include/linux/ide.h Fri Apr 18 15:57:08 2003
+++ b/include/linux/ide.h Fri Apr 18 15:57:08 2003
@@ -699,7 +699,8 @@
struct hd_driveid *id; /* drive model identification info */
struct proc_dir_entry *proc; /* /proc/ide/ directory entry */
struct ide_settings_s *settings;/* /proc/ide/ drive settings */
- devfs_handle_t de; /* directory for device */
+ char devfs_name[64]; /* devfs crap */
+ devfs_handle_t de; /* will go away soon */
struct hwif_s *hwif; /* actually (ide_hwif_t *) */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/