Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sysfs: attribute_group: enable const variants of is_visible()

When constifying instances of struct attribute, for consistency the
corresponding .is_visible() callback should be adapted, too.
Introduce a temporary transition mechanism until all callbacks are
converted.

Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
Link: https://patch.msgid.link/20251029-sysfs-const-attr-prep-v5-4-ea7d745acff4@weissschuh.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Thomas Weißschuh and committed by
Greg Kroah-Hartman
7dd9fdb4 02ac5335

+14 -4
+8 -2
fs/sysfs/group.c
··· 36 36 if (grp->attrs && grp->attrs[0] && grp->is_visible) 37 37 return grp->is_visible(kobj, grp->attrs[0], 0); 38 38 39 + if (grp->attrs && grp->attrs[0] && grp->is_visible_const) 40 + return grp->is_visible_const(kobj, grp->attrs[0], 0); 41 + 39 42 if (grp->bin_attrs && grp->bin_attrs[0] && grp->is_bin_visible) 40 43 return grp->is_bin_visible(kobj, grp->bin_attrs[0], 0); 41 44 ··· 64 61 */ 65 62 if (update) 66 63 kernfs_remove_by_name(parent, (*attr)->name); 67 - if (grp->is_visible) { 68 - mode = grp->is_visible(kobj, *attr, i); 64 + if (grp->is_visible || grp->is_visible_const) { 65 + if (grp->is_visible) 66 + mode = grp->is_visible(kobj, *attr, i); 67 + else 68 + mode = grp->is_visible_const(kobj, *attr, i); 69 69 mode &= ~SYSFS_GROUP_INVISIBLE; 70 70 if (!mode) 71 71 continue;
+6 -2
include/linux/sysfs.h
··· 104 104 */ 105 105 struct attribute_group { 106 106 const char *name; 107 - umode_t (*is_visible)(struct kobject *, 108 - struct attribute *, int); 107 + __SYSFS_FUNCTION_ALTERNATIVE( 108 + umode_t (*is_visible)(struct kobject *, 109 + struct attribute *, int); 110 + umode_t (*is_visible_const)(struct kobject *, 111 + const struct attribute *, int); 112 + ); 109 113 umode_t (*is_bin_visible)(struct kobject *, 110 114 const struct bin_attribute *, int); 111 115 size_t (*bin_size)(struct kobject *,