diff options
| -rw-r--r-- | fs/partitions/check.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 7187a57d51e8..7881ce05daef 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c | |||
| @@ -336,12 +336,31 @@ void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len) | |||
| 336 | disk->part[part-1] = p; | 336 | disk->part[part-1] = p; |
| 337 | } | 337 | } |
| 338 | 338 | ||
| 339 | static char *make_block_name(struct gendisk *disk) | ||
| 340 | { | ||
| 341 | char *name; | ||
| 342 | static char *block_str = "block:"; | ||
| 343 | int size; | ||
| 344 | |||
| 345 | size = strlen(block_str) + strlen(disk->disk_name) + 1; | ||
| 346 | name = kmalloc(size, GFP_KERNEL); | ||
| 347 | if (!name) | ||
| 348 | return NULL; | ||
| 349 | strcpy(name, block_str); | ||
| 350 | strcat(name, disk->disk_name); | ||
| 351 | return name; | ||
| 352 | } | ||
| 353 | |||
| 339 | static void disk_sysfs_symlinks(struct gendisk *disk) | 354 | static void disk_sysfs_symlinks(struct gendisk *disk) |
| 340 | { | 355 | { |
| 341 | struct device *target = get_device(disk->driverfs_dev); | 356 | struct device *target = get_device(disk->driverfs_dev); |
| 342 | if (target) { | 357 | if (target) { |
| 358 | char *disk_name = make_block_name(disk); | ||
| 343 | sysfs_create_link(&disk->kobj,&target->kobj,"device"); | 359 | sysfs_create_link(&disk->kobj,&target->kobj,"device"); |
| 344 | sysfs_create_link(&target->kobj,&disk->kobj,"block"); | 360 | if (disk_name) { |
| 361 | sysfs_create_link(&target->kobj,&disk->kobj,disk_name); | ||
| 362 | kfree(disk_name); | ||
| 363 | } | ||
| 345 | } | 364 | } |
| 346 | } | 365 | } |
| 347 | 366 | ||
| @@ -461,8 +480,12 @@ void del_gendisk(struct gendisk *disk) | |||
| 461 | devfs_remove_disk(disk); | 480 | devfs_remove_disk(disk); |
| 462 | 481 | ||
| 463 | if (disk->driverfs_dev) { | 482 | if (disk->driverfs_dev) { |
| 483 | char *disk_name = make_block_name(disk); | ||
| 464 | sysfs_remove_link(&disk->kobj, "device"); | 484 | sysfs_remove_link(&disk->kobj, "device"); |
| 465 | sysfs_remove_link(&disk->driverfs_dev->kobj, "block"); | 485 | if (disk_name) { |
| 486 | sysfs_remove_link(&disk->driverfs_dev->kobj, disk_name); | ||
| 487 | kfree(disk_name); | ||
| 488 | } | ||
| 466 | put_device(disk->driverfs_dev); | 489 | put_device(disk->driverfs_dev); |
| 467 | } | 490 | } |
| 468 | kobject_uevent(&disk->kobj, KOBJ_REMOVE); | 491 | kobject_uevent(&disk->kobj, KOBJ_REMOVE); |
