summaryrefslogtreecommitdiff
path: root/drivers/ide
diff options
context:
space:
mode:
authorAlexander Viro <viro@math.psu.edu>2002-08-10 02:21:40 -0700
committerLinus Torvalds <torvalds@penguin.transmeta.com>2002-08-10 02:21:40 -0700
commit7e06e792cd7ded1e7fdc57c2bdd78099ef79678b (patch)
tree498d1c4658410857c01434b86a53c590953438bb /drivers/ide
parent814bd2ba199743fb93045459f28f521036671b86 (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.c4
-rw-r--r--drivers/ide/main.c1
-rw-r--r--drivers/ide/probe.c12
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: