From 8498b17c2e92652d40e289c5ba1bca6f111f82f0 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sun, 2 Apr 2023 20:28:01 +0200 Subject: more patches --- ...-remove-CONFIG_SYSFS_DEPRECATED-and-CONFI.patch | 257 +++++++++++++++++++++ ...-class-fix-block-class-problem-when-remov.patch | 39 ++++ series | 2 + 3 files changed, 298 insertions(+) create mode 100644 0001-driver-core-remove-CONFIG_SYSFS_DEPRECATED-and-CONFI.patch create mode 100644 0002-driver-core-class-fix-block-class-problem-when-remov.patch diff --git a/0001-driver-core-remove-CONFIG_SYSFS_DEPRECATED-and-CONFI.patch b/0001-driver-core-remove-CONFIG_SYSFS_DEPRECATED-and-CONFI.patch new file mode 100644 index 00000000000000..ea262880241fe7 --- /dev/null +++ b/0001-driver-core-remove-CONFIG_SYSFS_DEPRECATED-and-CONFI.patch @@ -0,0 +1,257 @@ +From 763ee8434fbbea0ce5a614ae0c6bb74ec0ed078a Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Thu, 23 Feb 2023 08:33:26 +0100 +Subject: [PATCH 1/2] driver core: remove CONFIG_SYSFS_DEPRECATED and + CONFIG_SYSFS_DEPRECATED_V2 + +CONFIG_SYSFS_DEPRECATED was added in commit 88a22c985e35 +("CONFIG_SYSFS_DEPRECATED") in 2006 to allow systems with older versions +of some tools (i.e. Fedora 3's version of udev) to boot properly. Four +years later, in 2010, the option was attempted to be removed as most of +userspace should have been fixed up properly by then, but some kernel +developers clung to those old systems and refused to update, so we added +CONFIG_SYSFS_DEPRECATED_V2 in commit e52eec13cd6b ("SYSFS: Allow boot +time switching between deprecated and modern sysfs layout") to allow +them to continue to boot properly, and we allowed a boot time parameter +to be used to switch back to the old format if needed. + +Over time, the logic that was covered under these config options was +slowly removed from individual driver subsystems successfully, removed, +and the only thing that is now left in the kernel are some changes in +the block layer's representation in sysfs where real directories are +used instead of symlinks like normal. + +Because the original changes were done to userspace tools in 2006, and +all distros that use those tools are long end-of-life, and older +non-udev-based systems do not care about the block layer's sysfs +representation, it is time to finally remove this old logic and the +config entries from the kernel. + +Cc: Jonathan Corbet +Cc: "Rafael J. Wysocki" +Cc: linux-block@vger.kernel.org +Cc: linux-doc@vger.kernel.org +Acked-by: Jens Axboe +Link: https://lore.kernel.org/r/20230223073326.2073220-1-gregkh@linuxfoundation.org +Signed-off-by: Greg Kroah-Hartman +--- + Documentation/admin-guide/kernel-parameters.txt | 9 ----- + block/genhd.c | 19 ++++-------- + drivers/base/class.c | 2 - + drivers/base/core.c | 37 ----------------------- + include/linux/device.h | 6 --- + init/Kconfig | 38 ------------------------ + 6 files changed, 8 insertions(+), 103 deletions(-) + +--- a/Documentation/admin-guide/kernel-parameters.txt ++++ b/Documentation/admin-guide/kernel-parameters.txt +@@ -6130,15 +6130,6 @@ + later by a loaded module cannot be set this way. + Example: sysctl.vm.swappiness=40 + +- sysfs.deprecated=0|1 [KNL] +- Enable/disable old style sysfs layout for old udev +- on older distributions. When this option is enabled +- very new udev will not work anymore. When this option +- is disabled (or CONFIG_SYSFS_DEPRECATED not compiled) +- in older udev will not work anymore. +- Default depends on CONFIG_SYSFS_DEPRECATED_V2 set in +- the kernel configuration. +- + sysrq_always_enabled + [KNL] + Ignore sysrq setting - this boot parameter will +--- a/block/genhd.c ++++ b/block/genhd.c +@@ -466,12 +466,10 @@ int __must_check device_add_disk(struct + if (ret) + goto out_device_del; + +- if (!sysfs_deprecated) { +- ret = sysfs_create_link(block_depr, &ddev->kobj, +- kobject_name(&ddev->kobj)); +- if (ret) +- goto out_device_del; +- } ++ ret = sysfs_create_link(block_depr, &ddev->kobj, ++ kobject_name(&ddev->kobj)); ++ if (ret) ++ goto out_device_del; + + /* + * avoid probable deadlock caused by allocating memory with +@@ -554,8 +552,7 @@ out_put_holder_dir: + out_del_integrity: + blk_integrity_del(disk); + out_del_block_link: +- if (!sysfs_deprecated) +- sysfs_remove_link(block_depr, dev_name(ddev)); ++ sysfs_remove_link(block_depr, dev_name(ddev)); + out_device_del: + device_del(ddev); + out_free_ext_minor: +@@ -657,8 +654,7 @@ void del_gendisk(struct gendisk *disk) + + part_stat_set_all(disk->part0, 0); + disk->part0->bd_stamp = 0; +- if (!sysfs_deprecated) +- sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk))); ++ sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk))); + pm_runtime_set_memalloc_noio(disk_to_dev(disk), false); + device_del(disk_to_dev(disk)); + +@@ -912,8 +908,7 @@ static int __init genhd_device_init(void + register_blkdev(BLOCK_EXT_MAJOR, "blkext"); + + /* create top-level block dir */ +- if (!sysfs_deprecated) +- block_depr = kobject_create_and_add("block", NULL); ++ block_depr = kobject_create_and_add("block", NULL); + return 0; + } + +--- a/drivers/base/class.c ++++ b/drivers/base/class.c +@@ -180,7 +180,7 @@ int __class_register(struct class *cls, + + #if defined(CONFIG_BLOCK) + /* let the block class directory show up in the root of sysfs */ +- if (!sysfs_deprecated || cls != &block_class) ++ if (cls != &block_class) + cp->subsys.kobj.kset = class_kset; + #else + cp->subsys.kobj.kset = class_kset; +--- a/drivers/base/core.c ++++ b/drivers/base/core.c +@@ -36,19 +36,6 @@ + #include "physical_location.h" + #include "power/power.h" + +-#ifdef CONFIG_SYSFS_DEPRECATED +-#ifdef CONFIG_SYSFS_DEPRECATED_V2 +-long sysfs_deprecated = 1; +-#else +-long sysfs_deprecated = 0; +-#endif +-static int __init sysfs_deprecated_setup(char *arg) +-{ +- return kstrtol(arg, 10, &sysfs_deprecated); +-} +-early_param("sysfs.deprecated", sysfs_deprecated_setup); +-#endif +- + /* Device links support. */ + static LIST_HEAD(deferred_sync); + static unsigned int defer_sync_state_count = 1; +@@ -3137,15 +3124,6 @@ static struct kobject *get_device_parent + struct kobject *parent_kobj; + struct kobject *k; + +-#ifdef CONFIG_BLOCK +- /* block disks show up in /sys/block */ +- if (sysfs_deprecated && dev->class == &block_class) { +- if (parent && parent->class == &block_class) +- return &parent->kobj; +- return &block_class.p->subsys.kobj; +- } +-#endif +- + /* + * If we have no parent, we live in "virtual". + * Class-devices with a non class-device as parent, live +@@ -3324,12 +3302,6 @@ static int device_add_class_symlinks(str + goto out_subsys; + } + +-#ifdef CONFIG_BLOCK +- /* /sys/block has directories and does not need symlinks */ +- if (sysfs_deprecated && dev->class == &block_class) +- return 0; +-#endif +- + /* link in the class directory pointing to the device */ + error = sysfs_create_link(&dev->class->p->subsys.kobj, + &dev->kobj, dev_name(dev)); +@@ -3359,10 +3331,6 @@ static void device_remove_class_symlinks + if (dev->parent && device_is_not_partition(dev)) + sysfs_remove_link(&dev->kobj, "device"); + sysfs_remove_link(&dev->kobj, "subsystem"); +-#ifdef CONFIG_BLOCK +- if (sysfs_deprecated && dev->class == &block_class) +- return; +-#endif + sysfs_delete_link(&dev->class->p->subsys.kobj, &dev->kobj, dev_name(dev)); + } + +@@ -4652,11 +4620,6 @@ int device_change_owner(struct device *d + if (error) + goto out; + +-#ifdef CONFIG_BLOCK +- if (sysfs_deprecated && dev->class == &block_class) +- goto out; +-#endif +- + /* + * Change the owner of the symlink located in the class directory of + * the device class associated with @dev which points to the actual +--- a/include/linux/device.h ++++ b/include/linux/device.h +@@ -1092,10 +1092,4 @@ int dev_err_probe(const struct device *d + #define MODULE_ALIAS_CHARDEV_MAJOR(major) \ + MODULE_ALIAS("char-major-" __stringify(major) "-*") + +-#ifdef CONFIG_SYSFS_DEPRECATED +-extern long sysfs_deprecated; +-#else +-#define sysfs_deprecated 0 +-#endif +- + #endif /* _DEVICE_H_ */ +--- a/init/Kconfig ++++ b/init/Kconfig +@@ -1297,44 +1297,6 @@ config SCHED_AUTOGROUP + desktop applications. Task group autogeneration is currently based + upon task session. + +-config SYSFS_DEPRECATED +- bool "Enable deprecated sysfs features to support old userspace tools" +- depends on SYSFS +- default n +- help +- This option adds code that switches the layout of the "block" class +- devices, to not show up in /sys/class/block/, but only in +- /sys/block/. +- +- This switch is only active when the sysfs.deprecated=1 boot option is +- passed or the SYSFS_DEPRECATED_V2 option is set. +- +- This option allows new kernels to run on old distributions and tools, +- which might get confused by /sys/class/block/. Since 2007/2008 all +- major distributions and tools handle this just fine. +- +- Recent distributions and userspace tools after 2009/2010 depend on +- the existence of /sys/class/block/, and will not work with this +- option enabled. +- +- Only if you are using a new kernel on an old distribution, you might +- need to say Y here. +- +-config SYSFS_DEPRECATED_V2 +- bool "Enable deprecated sysfs features by default" +- default n +- depends on SYSFS +- depends on SYSFS_DEPRECATED +- help +- Enable deprecated sysfs by default. +- +- See the CONFIG_SYSFS_DEPRECATED option for more details about this +- option. +- +- Only if you are using a new kernel on an old distribution, you might +- need to say Y here. Even then, odds are you would not need it +- enabled, you can always pass the boot option if absolutely necessary. +- + config RELAY + bool "Kernel->user space relay support (formerly relayfs)" + select IRQ_WORK diff --git a/0002-driver-core-class-fix-block-class-problem-when-remov.patch b/0002-driver-core-class-fix-block-class-problem-when-remov.patch new file mode 100644 index 00000000000000..521337e3e03bf2 --- /dev/null +++ b/0002-driver-core-class-fix-block-class-problem-when-remov.patch @@ -0,0 +1,39 @@ +From 6ecddadae3f779408bfa6a1b0c81e7728a00395e Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Tue, 7 Mar 2023 08:43:59 +0100 +Subject: [PATCH 2/2] driver core: class: fix block class problem when removing + CONFIG_SYSFS_DEPRECATED* + +In removing the CONFIG_SYSFS_DEPRECATED and CONFIG_SYSFS_DEPRECATED_V2 +config options, I messed up in the __class_register() function and got +the logic incorrect. Fix this all up by just removing the special case +of a block device class logic in this function, as that is what is +intended. + +In testing, this solves the boot problem on my systems, hopefully on +others as well. + +Cc: "Rafael J. Wysocki" +Reported-by: Stephen Rothwell +Fixes: 721da5cee9d4 ("driver core: remove CONFIG_SYSFS_DEPRECATED and CONFIG_SYSFS_DEPRECATED_V2") +Signed-off-by: Greg Kroah-Hartman +--- + drivers/base/class.c | 6 ------ + 1 file changed, 6 deletions(-) + +--- a/drivers/base/class.c ++++ b/drivers/base/class.c +@@ -178,13 +178,7 @@ int __class_register(struct class *cls, + if (!cls->dev_kobj) + cls->dev_kobj = sysfs_dev_char_kobj; + +-#if defined(CONFIG_BLOCK) +- /* let the block class directory show up in the root of sysfs */ +- if (cls != &block_class) +- cp->subsys.kobj.kset = class_kset; +-#else + cp->subsys.kobj.kset = class_kset; +-#endif + cp->subsys.kobj.ktype = &class_ktype; + cp->class = cls; + cls->p = cp; diff --git a/series b/series index aab7f87aacd0b2..c3f4fe52648e38 100644 --- a/series +++ b/series @@ -1,4 +1,6 @@ # +0001-driver-core-remove-CONFIG_SYSFS_DEPRECATED-and-CONFI.patch +0002-driver-core-class-fix-block-class-problem-when-remov.patch usb.patch 0001-vsmp-driver.patch 0001-driver-core-aux-test-code.patch -- cgit 1.2.3-korg