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

sysfs: explicitly pass size to sysfs_add_bin_file_mode_ns()

Upcoming changes to the sysfs core require the size of the created file
to be overridable by the caller.
Add a parameter to enable this.
For now keep using attr->size in all cases.

Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
Acked-by: Krzysztof Wilczyński <kw@linux.com>
Link: https://lore.kernel.org/r/20241103-sysfs-const-bin_attr-v2-1-71110628844c@weissschuh.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Thomas Weißschuh and committed by
Greg Kroah-Hartman
0afcee13 09fbb82f

+7 -6
+4 -4
fs/sysfs/file.c
··· 315 315 } 316 316 317 317 int sysfs_add_bin_file_mode_ns(struct kernfs_node *parent, 318 - const struct bin_attribute *battr, umode_t mode, 318 + const struct bin_attribute *battr, umode_t mode, size_t size, 319 319 kuid_t uid, kgid_t gid, const void *ns) 320 320 { 321 321 const struct attribute *attr = &battr->attr; ··· 340 340 #endif 341 341 342 342 kn = __kernfs_create_file(parent, attr->name, mode & 0777, uid, gid, 343 - battr->size, ops, (void *)attr, ns, key); 343 + size, ops, (void *)attr, ns, key); 344 344 if (IS_ERR(kn)) { 345 345 if (PTR_ERR(kn) == -EEXIST) 346 346 sysfs_warn_dup(parent, attr->name); ··· 580 580 return -EINVAL; 581 581 582 582 kobject_get_ownership(kobj, &uid, &gid); 583 - return sysfs_add_bin_file_mode_ns(kobj->sd, attr, attr->attr.mode, uid, 584 - gid, NULL); 583 + return sysfs_add_bin_file_mode_ns(kobj->sd, attr, attr->attr.mode, 584 + attr->size, uid, gid, NULL); 585 585 } 586 586 EXPORT_SYMBOL_GPL(sysfs_create_bin_file); 587 587
+2 -1
fs/sysfs/group.c
··· 87 87 if (grp->bin_attrs) { 88 88 for (i = 0, bin_attr = grp->bin_attrs; *bin_attr; i++, bin_attr++) { 89 89 umode_t mode = (*bin_attr)->attr.mode; 90 + size_t size = (*bin_attr)->size; 90 91 91 92 if (update) 92 93 kernfs_remove_by_name(parent, ··· 105 104 106 105 mode &= SYSFS_PREALLOC | 0664; 107 106 error = sysfs_add_bin_file_mode_ns(parent, *bin_attr, 108 - mode, uid, gid, 107 + mode, size, uid, gid, 109 108 NULL); 110 109 if (error) 111 110 break;
+1 -1
fs/sysfs/sysfs.h
··· 31 31 const struct attribute *attr, umode_t amode, kuid_t uid, 32 32 kgid_t gid, const void *ns); 33 33 int sysfs_add_bin_file_mode_ns(struct kernfs_node *parent, 34 - const struct bin_attribute *battr, umode_t mode, 34 + const struct bin_attribute *battr, umode_t mode, size_t size, 35 35 kuid_t uid, kgid_t gid, const void *ns); 36 36 37 37 /*