From 88932ba4e15154a83949079216535d886ce95274 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 13 Dec 2005 15:17:34 -0800 Subject: [PATCH] --- yaml --- r: 16215 b: refs/heads/master c: 8218ef80932aa7e5e3d20c929a640c8d82133a9a h: refs/heads/master i: 16213: 75f43dcaca8f1b5f3289421584bd283a5eb7e2fc 16211: ef6212afb0d76f7ed5da97a03626731490d96375 16207: 5b606a3fc76c0c0fcc62f588aec60c7c80b26692 v: v3 --- [refs] | 2 +- trunk/fs/partitions/check.c | 27 +++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 072b66dde6cd..79ff3fb0d949 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 874c6241b2e49e52680d32a50d4909c7768d5cb9 +refs/heads/master: 8218ef80932aa7e5e3d20c929a640c8d82133a9a diff --git a/trunk/fs/partitions/check.c b/trunk/fs/partitions/check.c index 7187a57d51e8..7881ce05daef 100644 --- a/trunk/fs/partitions/check.c +++ b/trunk/fs/partitions/check.c @@ -336,12 +336,31 @@ void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len) disk->part[part-1] = p; } +static char *make_block_name(struct gendisk *disk) +{ + char *name; + static char *block_str = "block:"; + int size; + + size = strlen(block_str) + strlen(disk->disk_name) + 1; + name = kmalloc(size, GFP_KERNEL); + if (!name) + return NULL; + strcpy(name, block_str); + strcat(name, disk->disk_name); + return name; +} + static void disk_sysfs_symlinks(struct gendisk *disk) { struct device *target = get_device(disk->driverfs_dev); if (target) { + char *disk_name = make_block_name(disk); sysfs_create_link(&disk->kobj,&target->kobj,"device"); - sysfs_create_link(&target->kobj,&disk->kobj,"block"); + if (disk_name) { + sysfs_create_link(&target->kobj,&disk->kobj,disk_name); + kfree(disk_name); + } } } @@ -461,8 +480,12 @@ void del_gendisk(struct gendisk *disk) devfs_remove_disk(disk); if (disk->driverfs_dev) { + char *disk_name = make_block_name(disk); sysfs_remove_link(&disk->kobj, "device"); - sysfs_remove_link(&disk->driverfs_dev->kobj, "block"); + if (disk_name) { + sysfs_remove_link(&disk->driverfs_dev->kobj, disk_name); + kfree(disk_name); + } put_device(disk->driverfs_dev); } kobject_uevent(&disk->kobj, KOBJ_REMOVE);