• Damien Le Moal's avatar
    block: null_blk: Improve device creation with configfs · 49c3b926
    Damien Le Moal authored
    Currently, the directory name used to create a nullb device through
    sysfs is not used as the device name, potentially causing headaches for
    users if devices are already created through the modprobe operation
    withe the nr_device module parameter not set to 0. E.g. a user can do
    "mkdir /sys/kernel/config/nullb/nullb0" to create a nullb device even
    though /dev/nullb0 was already created by modprobe. In this case, the
    configfs nullb device will be named nullb1, causing confusion for the
    user.
    
    Simplify this by using the configfs directory name as the nullb device
    name, always, unless another nullb device is already using the same
    name. E.g. if modprobe created nullb0, then:
    
    $ mkdir /sys/kernel/config/nullb/nullb0
    mkdir: cannot create directory '/sys/kernel/config/nullb/nullb0': File
    exists
    
    will be reported to the user.
    
    To implement this, the function null_find_dev_by_name() is added to
    check for the existence of a nullb device with the name used for a new
    configfs device directory. nullb_group_make_item() uses this new
    function to check if the directory name can be used as the disk name.
    Finally, null_add_dev() is modified to use the device config item name
    as the disk name for a new nullb device created using configfs.
    The naming of devices created though modprobe remains unchanged.
    
    Of note is that it is possible for a user to create through configfs a
    nullb device with the same name as an existing device. E.g.
    
    $ mkdir /sys/kernel/config/nullb/null
    
    will successfully create the nullb device named "null" but this block
    device will however not appear under /dev/ since /dev/null already
    exists.
    Suggested-by: default avatarJoseph Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
    Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    Link: https://lore.kernel.org/r/20220420005718.3780004-5-damien.lemoal@opensource.wdc.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    49c3b926
main.c 55 KB