On Wed, May 08, 2024 at 08:20:51PM +0200, Christoph Fritz wrote: > ... > > ... > > > > > +static int lin_create_sysfs_id_files(struct net_device *ndev) > > > > > +{ > > > > > + struct lin_device *ldev = netdev_priv(ndev); > > > > > + struct kobj_attribute *attr; > > > > > + int ret; > > > > > + > > > > > + for (int id = 0; id < LIN_NUM_IDS; id++) { > > > > > + ldev->sysfs_entries[id].ldev = ldev; > > > > > + attr = &ldev->sysfs_entries[id].attr; > > > > > + attr->attr.name = kasprintf(GFP_KERNEL, "%02x", id); > > > > > + if (!attr->attr.name) > > > > > + return -ENOMEM; > > > > > + attr->attr.mode = 0644; > > > > > + attr->show = lin_identifier_show; > > > > > + attr->store = lin_identifier_store; > > > > > + > > > > > + sysfs_attr_init(&attr->attr); > > > > > + ret = sysfs_create_file(ldev->lin_ids_kobj, &attr->attr); > > > > > + if (ret) { > > > > > + kfree(attr->attr.name); > > > > > + return -ENOMEM; > > > > > + } > > > > > + } > > > > > + > > > > > + return 0; > > > > > +} > > > > > > > > Can you use .dev_groups instead ? > > > > > > I'm not sure where to attach this in this glue code here. Should I do a > > > class_register() and add the .dev_groups there? > > > > I guess struct class would be correct direction but I'm not sure if it's > > viable in this case. It would avoid the need for custom sysfs setup code > > if it's workable. > > I just tried to find a way, but these are 64 sysfs files and declaring > them all static looks a bit odd to me. I might be missing something > here. > > For v4 I would stick to the dynamic setup and fix the rollback. > > Any objections? Yes, you race with userspace and loose by trying to do this "by hand". Make this static please. thanks, greg k-h