From 07586b3328bc910bf2cc4c25f7eb2dea7555a69c Mon Sep 17 00:00:00 2001 From: Alexander Viro Date: Sat, 7 Sep 2002 03:05:04 -0700 Subject: [PATCH] (23/25) move pointer to gendisk from hwif to drive ide switched from hwif->gd[i] to hwif->drive[i]->disk - IOW, instead of array of two pointers to gendisks refered from hwif, we keep these pointers in relevant drives. Cleaned up. --- drivers/ide/ide-cd.c | 23 +++++++++-------------- drivers/ide/ide-disk.c | 8 ++------ drivers/ide/ide-floppy.c | 8 ++------ drivers/ide/ide-probe.c | 2 +- drivers/ide/ide.c | 9 +++------ include/linux/ide.h | 2 +- 6 files changed, 18 insertions(+), 34 deletions(-) diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 216ec47a2b32..81ca240c6be5 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c @@ -2593,9 +2593,8 @@ static int ide_cdrom_register (ide_drive_t *drive, int nslots) { struct cdrom_info *info = drive->driver_data; struct cdrom_device_info *devinfo = &info->devinfo; - int minor = (drive->select.b.unit) << PARTN_BITS; - devinfo->dev = mk_kdev(HWIF(drive)->major, minor); + devinfo->dev = mk_kdev(drive->disk->major, drive->disk->first_minor); devinfo->ops = &ide_cdrom_dops; devinfo->mask = 0; *(int *)&devinfo->speed = CDROM_STATE_FLAGS (drive)->current_speed; @@ -2622,7 +2621,8 @@ static int ide_cdrom_register (ide_drive_t *drive, int nslots) devinfo->mask |= CDC_CLOSE_TRAY; devinfo->de = devfs_register(drive->de, "cd", DEVFS_FL_DEFAULT, - HWIF(drive)->major, minor, + drive->disk->major, + drive->disk->first_minor, S_IFBLK | S_IRUGO | S_IWUGO, ide_fops, NULL); @@ -2823,13 +2823,12 @@ int ide_cdrom_setup (ide_drive_t *drive) { struct cdrom_info *info = drive->driver_data; struct cdrom_device_info *cdi = &info->devinfo; - int minor = drive->select.b.unit << PARTN_BITS; int nslots; /* * default to read-only always and fix latter at the bottom */ - set_device_ro(mk_kdev(HWIF(drive)->major, minor), 1); + set_device_ro(mk_kdev(drive->disk->major, drive->disk->first_minor), 1); blk_queue_hardsect_size(&drive->queue, CD_FRAMESIZE); blk_queue_prep_rq(&drive->queue, ll_10byte_cmd_build); @@ -2951,7 +2950,7 @@ int ide_cdrom_setup (ide_drive_t *drive) nslots = ide_cdrom_probe_capabilities (drive); if (CDROM_CONFIG_FLAGS(drive)->dvd_ram) - set_device_ro(mk_kdev(HWIF(drive)->major, minor), 0); + set_device_ro(mk_kdev(drive->disk->major, drive->disk->first_minor), 0); if (ide_cdrom_register (drive, nslots)) { printk ("%s: ide_cdrom_setup failed to register device with the cdrom driver.\n", drive->name); @@ -2998,8 +2997,8 @@ void ide_cdrom_release (struct inode *inode, struct file *file, static int ide_cdrom_check_media_change (ide_drive_t *drive) { - return cdrom_media_changed(mk_kdev(HWIF (drive)->major, - (drive->select.b.unit) << PARTN_BITS)); + return cdrom_media_changed(mk_kdev(drive->disk->major, + drive->disk->first_minor)); } static @@ -3025,9 +3024,7 @@ int ide_cdrom_cleanup(ide_drive_t *drive) { struct cdrom_info *info = drive->driver_data; struct cdrom_device_info *devinfo = &info->devinfo; - ide_hwif_t *hwif = HWIF(drive); - int unit = drive - hwif->drives; - struct gendisk *g = hwif->gd[unit]; + struct gendisk *g = drive->disk; if (ide_unregister_subdriver (drive)) return 1; @@ -3092,9 +3089,7 @@ MODULE_DESCRIPTION("ATAPI CD-ROM Driver"); static int ide_cdrom_reinit (ide_drive_t *drive) { struct cdrom_info *info; - ide_hwif_t *hwif = HWIF(drive); - int unit = drive - hwif->drives; - struct gendisk *g = hwif->gd[unit]; + struct gendisk *g = drive->disk; struct request_sense sense; if (!strstr("ide-cdrom", drive->driver_req)) diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index 144c0bb95155..e8040b7626f7 100644 --- a/drivers/ide/ide-disk.c +++ b/drivers/ide/ide-disk.c @@ -1618,9 +1618,7 @@ static void idedisk_setup (ide_drive_t *drive) static int idedisk_cleanup (ide_drive_t *drive) { - ide_hwif_t *hwif = HWIF(drive); - int unit = drive - hwif->drives; - struct gendisk *g = hwif->gd[unit]; + struct gendisk *g = drive->disk; if ((drive->id->cfs_enable_2 & 0x3000) && drive->wcache) if (do_idedisk_flushcache(drive)) printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n", @@ -1672,9 +1670,7 @@ MODULE_DESCRIPTION("ATA DISK Driver"); static int idedisk_reinit(ide_drive_t *drive) { - ide_hwif_t *hwif = HWIF(drive); - int unit = drive - hwif->drives; - struct gendisk *g = hwif->gd[unit]; + struct gendisk *g = drive->disk; /* strstr("foo", "") is non-NULL */ if (!strstr("ide-disk", drive->driver_req)) diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c index 5e2ca16310fa..c20115bc35f1 100644 --- a/drivers/ide/ide-floppy.c +++ b/drivers/ide/ide-floppy.c @@ -2112,9 +2112,7 @@ static void idefloppy_setup (ide_drive_t *drive, idefloppy_floppy_t *floppy) static int idefloppy_cleanup (ide_drive_t *drive) { idefloppy_floppy_t *floppy = drive->driver_data; - ide_hwif_t *hwif = HWIF(drive); - int unit = drive - hwif->drives; - struct gendisk *g = hwif->gd[unit]; + struct gendisk *g = drive->disk; if (ide_unregister_subdriver (drive)) return 1; @@ -2181,9 +2179,7 @@ static ide_driver_t idefloppy_driver = { static int idefloppy_reinit (ide_drive_t *drive) { idefloppy_floppy_t *floppy; - ide_hwif_t *hwif = HWIF(drive); - int unit = drive - hwif->drives; - struct gendisk *g = hwif->gd[unit]; + struct gendisk *g = drive->disk; if (!strstr("ide-floppy", drive->driver_req)) goto failed; if (!drive->present) diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 50e98a9e6066..47336c9d408e 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c @@ -848,7 +848,7 @@ static void init_gendisk (ide_hwif_t *hwif) gd[unit].major_name = names + 4*unit; gd[unit].minor_shift = PARTN_BITS; gd[unit].fops = ide_fops; - hwif->gd[unit] = gd + unit; + hwif->drives[unit].disk = gd + unit; } for (unit = 0; unit < units; ++unit) { diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index 08950237c5d6..52472f955262 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c @@ -1748,10 +1748,7 @@ int ide_do_drive_cmd (ide_drive_t *drive, struct request *rq, ide_action_t actio void ide_revalidate_drive (ide_drive_t *drive) { - ide_hwif_t *hwif = HWIF(drive); - int unit = drive - hwif->drives; - struct gendisk *g = hwif->gd[unit]; - g->part[0].nr_sects = current_capacity(drive); + drive->disk->part[0].nr_sects = current_capacity(drive); } /* @@ -2058,13 +2055,13 @@ void ide_unregister (unsigned int index) blk_dev[hwif->major].data = NULL; blk_dev[hwif->major].queue = NULL; blk_clear(hwif->major); - gd = hwif->gd[0]; + gd = hwif->drives[0].disk; if (gd) { int i; kfree(gd->part); kfree(gd); for (i = 0; i < MAX_DRIVES; i++) - hwif->gd[i] = NULL; + hwif->drives[i].disk = NULL; } old_hwif = *hwif; init_hwif_data (index); /* restore hwif data to pristine status */ diff --git a/include/linux/ide.h b/include/linux/ide.h index aacdaad8f594..501b97902799 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -530,6 +530,7 @@ typedef struct ide_drive_s { unsigned int failures; /* current failure count */ unsigned int max_failures; /* maximum allowed failure count */ struct list_head list; + struct gendisk *disk; } ide_drive_t; /* @@ -716,7 +717,6 @@ typedef struct hwif_s { */ hw_regs_t hw; /* Hardware info */ ide_drive_t drives[MAX_DRIVES]; /* drive info */ - struct gendisk *gd[MAX_DRIVES];/* gendisk structure */ int addressing; /* hosts addressing */ void (*tuneproc)(ide_drive_t *, byte); /* routine to tune PIO mode for drives */ int (*speedproc)(ide_drive_t *, byte); /* routine to retune DMA modes for drives */ -- cgit v1.2.3