• Miquel Raynal's avatar
    sysfs: Skip empty folders creation · a91845b9
    Miquel Raynal authored
    Most sysfs attributes are statically defined, the goal with this design
    being to be able to move all the filesystem description into read-only
    memory. Anyway, it may be relevant in some cases to populate attributes
    at run time. This leads to situation where an attribute may or may not be
    present depending on conditions which are not known at compile
    time, up to the point where no attribute at all gets added in a folder
    which then becomes "sometimes" empty. Problem is, providing an attribute
    group with a name and without .[bin_]attrs members will be loudly
    refused by the core, leading in most cases to a device registration
    failure.
    
    The simple way to support such situation right now is to dynamically
    allocate an empty attribute array, which is:
    * a (small) waste of space
    * a waste of time
    * disturbing, to say the least, as an empty sysfs folder will be created
      anyway.
    
    Another (even worse) possibility would be to dynamically overwrite a
    member of the attribute_group list, hopefully the last, which is also
    supposed to remain in the read-only section.
    
    In order to avoid these hackish situations, while still giving a little
    bit of flexibility, we might just check the validity of the .[bin_]attrs
    list and, if empty, just skip the attribute group creation instead of
    failing. This way, developers will not be tempted to workaround the
    core with useless allocations or strange writes on supposedly read-only
    structures.
    
    The content of the WARN() message is kept but turned into a debug
    message in order to help developers understanding why their sysfs
    folders might now silently fail to be created.
    Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
    Message-ID: <20230614063018.2419043-3-miquel.raynal@bootlin.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    a91845b9
group.c 14.8 KB