aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-04-02 20:28:01 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-04-02 20:28:01 +0200
commit8498b17c2e92652d40e289c5ba1bca6f111f82f0 (patch)
tree6aedf7a248bd61a9eea7b0f44574ad65b77e80ff
parent2d7b8f2b5269b54a043ac278e043ab69b50068ae (diff)
downloadpatches-8498b17c2e92652d40e289c5ba1bca6f111f82f0.tar.gz
more patches
-rw-r--r--0001-driver-core-remove-CONFIG_SYSFS_DEPRECATED-and-CONFI.patch257
-rw-r--r--0002-driver-core-class-fix-block-class-problem-when-remov.patch39
-rw-r--r--series2
3 files changed, 298 insertions, 0 deletions
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 <gregkh@linuxfoundation.org>
+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 <corbet@lwn.net>
+Cc: "Rafael J. Wysocki" <rafael@kernel.org>
+Cc: linux-block@vger.kernel.org
+Cc: linux-doc@vger.kernel.org
+Acked-by: Jens Axboe <axboe@kernel.dk>
+Link: https://lore.kernel.org/r/20230223073326.2073220-1-gregkh@linuxfoundation.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 <gregkh@linuxfoundation.org>
+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" <rafael@kernel.org>
+Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
+Fixes: 721da5cee9d4 ("driver core: remove CONFIG_SYSFS_DEPRECATED and CONFIG_SYSFS_DEPRECATED_V2")
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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