aboutsummaryrefslogtreecommitdiffstats
path: root/fs/partitions
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2010-09-08 10:54:17 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-10-22 13:16:43 -0400
commite52eec13cd6b7f30ab19081b387813e03e592ae5 (patch)
tree7b327e0b9283c578fb10922edcf6e10b3b8fd943 /fs/partitions
parent39aba963d937edb20db7d9d93e6dda5d2adfdcdd (diff)
SYSFS: Allow boot time switching between deprecated and modern sysfs layout
I have some systems which need legacy sysfs due to old tools that are making assumptions that a directory can never be a symlink to another directory, and it's a big hazzle to compile separate kernels for them. This patch turns CONFIG_SYSFS_DEPRECATED into a run time option that can be switched on/off the kernel command line. This way the same binary can be used in both cases with just a option on the command line. The old CONFIG_SYSFS_DEPRECATED_V2 option is still there to set the default. I kept the weird name to not break existing config files. Also the compat code can be still completely disabled by undefining CONFIG_SYSFS_DEPRECATED_SWITCH -- just the optimizer takes care of this now instead of lots of ifdefs. This makes the code look nicer. v2: This is an updated version on top of Kay's patch to only handle the block devices. I tested it on my old systems and that seems to work. Cc: axboe@kernel.dk Signed-off-by: Andi Kleen <ak@linux.intel.com> Cc: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs/partitions')
-rw-r--r--fs/partitions/check.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/fs/partitions/check.c b/fs/partitions/check.c
index 79fbf3f390f0..137bf9787853 100644
--- a/fs/partitions/check.c
+++ b/fs/partitions/check.c
@@ -513,14 +513,14 @@ void register_disk(struct gendisk *disk)
513 513
514 if (device_add(ddev)) 514 if (device_add(ddev))
515 return; 515 return;
516#ifndef CONFIG_SYSFS_DEPRECATED 516 if (!sysfs_deprecated) {
517 err = sysfs_create_link(block_depr, &ddev->kobj, 517 err = sysfs_create_link(block_depr, &ddev->kobj,
518 kobject_name(&ddev->kobj)); 518 kobject_name(&ddev->kobj));
519 if (err) { 519 if (err) {
520 device_del(ddev); 520 device_del(ddev);
521 return; 521 return;
522 }
522 } 523 }
523#endif
524 disk->part0.holder_dir = kobject_create_and_add("holders", &ddev->kobj); 524 disk->part0.holder_dir = kobject_create_and_add("holders", &ddev->kobj);
525 disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj); 525 disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj);
526 526
@@ -737,8 +737,7 @@ void del_gendisk(struct gendisk *disk)
737 kobject_put(disk->part0.holder_dir); 737 kobject_put(disk->part0.holder_dir);
738 kobject_put(disk->slave_dir); 738 kobject_put(disk->slave_dir);
739 disk->driverfs_dev = NULL; 739 disk->driverfs_dev = NULL;
740#ifndef CONFIG_SYSFS_DEPRECATED 740 if (!sysfs_deprecated)
741 sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk))); 741 sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk)));
742#endif
743 device_del(disk_to_dev(disk)); 742 device_del(disk_to_dev(disk));
744} 743}