diff options
| author | Alexander Viro <viro@math.psu.edu> | 2002-08-10 02:21:40 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-08-10 02:21:40 -0700 |
| commit | 7e06e792cd7ded1e7fdc57c2bdd78099ef79678b (patch) | |
| tree | 498d1c4658410857c01434b86a53c590953438bb /drivers/ide | |
| parent | 814bd2ba199743fb93045459f28f521036671b86 (diff) | |
[PATCH] clean up major_name
->major_name for per-disk gendisks set to full name - i.e.
IDE gendisks have "hda", "hdb", etc. instead of "hd".
As the result, we kill a lot of crap in check.c::disk_name().
In particular, now we can afford ->minor_shift set to 0
for ide-cd (disk_name() was the only obstacle)
Diffstat (limited to 'drivers/ide')
| -rw-r--r-- | drivers/ide/hd.c | 4 | ||||
| -rw-r--r-- | drivers/ide/main.c | 1 | ||||
| -rw-r--r-- | drivers/ide/probe.c | 12 |
3 files changed, 13 insertions, 4 deletions
diff --git a/drivers/ide/hd.c b/drivers/ide/hd.c index 91403c27419f..750648bfb34d 100644 --- a/drivers/ide/hd.c +++ b/drivers/ide/hd.c @@ -712,14 +712,14 @@ static struct gendisk hd_gendisk[2] = { { .major = MAJOR_NR, .first_minor = 0, - .major_name = "hd", + .major_name = "hda", .minor_shift = 6, .part = hd, .fops = &hd_fops, },{ .major = MAJOR_NR, .first_minor = 64, - .major_name = "hd", + .major_name = "hdb", .minor_shift = 6, .part = hd + 64, .fops = &hd_fops, diff --git a/drivers/ide/main.c b/drivers/ide/main.c index e37abbb65c91..cab68f44fa26 100644 --- a/drivers/ide/main.c +++ b/drivers/ide/main.c @@ -493,6 +493,7 @@ void ide_unregister(struct ata_channel *ch) int i; for (i = 0; i < MAX_DRIVES; i++) del_gendisk(gd + i); + kfree(gd->major_name); kfree(gd->part); if (gd->de_arr) kfree (gd->de_arr); diff --git a/drivers/ide/probe.c b/drivers/ide/probe.c index 701317fbdd30..15c07ff80d61 100644 --- a/drivers/ide/probe.c +++ b/drivers/ide/probe.c @@ -1048,6 +1048,7 @@ static void channel_init(struct ata_channel *ch) char *flags; unsigned int unit; extern devfs_handle_t ide_devfs_handle; + char *names; if (!ch->present) return; @@ -1127,6 +1128,11 @@ static void channel_init(struct ata_channel *ch) goto err_kmalloc_gd_flags; memset(flags, 0, sizeof(char) * MAX_DRIVES); + names = kmalloc (4 * MAX_DRIVES, GFP_KERNEL); + if (!names) + goto err_kmalloc_gd_names; + memset(names, 0, 4 * MAX_DRIVES); + for (unit = 0; unit < MAX_DRIVES; ++unit) { gd[unit].part = part + (unit << PARTN_BITS); gd[unit].de_arr = de_arr + unit; @@ -1134,8 +1140,8 @@ static void channel_init(struct ata_channel *ch) ch->drives[unit].part = gd[unit].part; gd[unit].major = ch->major; gd[unit].first_minor = unit << PARTN_BITS; - /* treated special in genhd.c */ - gd[unit].major_name = IDE_MAJOR_NAME; + sprintf(names + 4*unit, "hd%c", 'a'+ch->index*MAX_DRIVES+unit); + gd[unit].major_name = names + 4*unit; gd[unit].minor_shift = PARTN_BITS; gd[unit].nr_real = 1; gd[unit].fops = ide_fops; @@ -1161,6 +1167,8 @@ static void channel_init(struct ata_channel *ch) return; +err_kmalloc_gd_names: + kfree(names); err_kmalloc_gd_flags: kfree(de_arr); err_kmalloc_gd_de_arr: |
