From: viro@parcelfarce.linux.theplanet.co.uk Now disk->present is not needed - we can always check for disk->gd. Field removed, pd_probe_drive() became void(struct pd_unit *), pd_detect() cleaned up, --- 25-akpm/drivers/block/paride/pd.c | 40 +++++++++++++++----------------------- 1 files changed, 16 insertions(+), 24 deletions(-) diff -puN drivers/block/paride/pd.c~PI21-present-RC1 drivers/block/paride/pd.c --- 25/drivers/block/paride/pd.c~PI21-present-RC1 Wed Jan 14 13:46:22 2004 +++ 25-akpm/drivers/block/paride/pd.c Wed Jan 14 13:46:22 2004 @@ -252,7 +252,6 @@ struct pd_unit { int removable; /* removable media device ? */ int standby; int alt_geom; - int present; char name[PD_NAMELEN]; /* pda, pdb, etc ... */ struct gendisk *gd; }; @@ -279,7 +278,6 @@ static void pd_init_units(void) disk->changed = 1; disk->capacity = 0; disk->drive = parm[D_SLV]; - disk->present = 0; snprintf(disk->name, PD_NAMELEN, "%s%c", name, 'a'+unit); disk->alt_geom = parm[D_GEO]; disk->standby = parm[D_SBY]; @@ -864,11 +862,11 @@ static struct block_device_operations pd .revalidate_disk= pd_revalidate }; -static int pd_probe_drive(struct pd_unit *disk) +static void pd_probe_drive(struct pd_unit *disk) { struct gendisk *p = alloc_disk(1 << PD_BITS); if (!p) - return 0; + return; strcpy(p->disk_name, disk->name); p->fops = &pd_fops; p->major = major; @@ -880,28 +878,24 @@ static int pd_probe_drive(struct pd_unit if (disk->drive == -1) { for (disk->drive = 0; disk->drive <= 1; disk->drive++) if (pd_identify(disk)) - return 1; + return; } else if (pd_identify(disk)) - return 1; + return; disk->gd = NULL; put_disk(p); - return 0; } static int pd_detect(void) { - int k, unit; + int found = 0, unit; struct pd_unit *disk; - k = 0; if (pd_drive_count == 0) { /* nothing spec'd - so autoprobe for 1 */ disk = pd; if (pi_init(disk->pi, 1, -1, -1, -1, -1, -1, pd_scratch, PI_PD, verbose, disk->name)) { - if (pd_probe_drive(disk)) { - disk->present = 1; - k = 1; - } else + pd_probe_drive(disk); + if (!disk->gd) pi_release(disk->pi); } @@ -913,24 +907,22 @@ static int pd_detect(void) if (pi_init(disk->pi, 0, parm[D_PRT], parm[D_MOD], parm[D_UNI], parm[D_PRO], parm[D_DLY], pd_scratch, PI_PD, verbose, disk->name)) { - if (pd_probe_drive(disk)) { - disk->present = 1; - k = unit + 1; - } else + pd_probe_drive(disk); + if (!disk->gd) pi_release(disk->pi); } } } for (unit = 0, disk = pd; unit < PD_UNITS; unit++, disk++) { - if (disk->present) { + if (disk->gd) { set_capacity(disk->gd, disk->capacity); add_disk(disk->gd); + found = 1; } } - if (k) - return 1; - printk("%s: no valid drive found\n", name); - return 0; + if (!found) + printk("%s: no valid drive found\n", name); + return found; } static int __init pd_init(void) @@ -969,8 +961,8 @@ static void __exit pd_exit(void) int unit; unregister_blkdev(major, name); for (unit = 0, disk = pd; unit < PD_UNITS; unit++, disk++) { - if (disk->present) { - struct gendisk *p = disk->gd; + struct gendisk *p = disk->gd; + if (p) { disk->gd = NULL; del_gendisk(p); put_disk(p); _