• Christian Brauner's avatar
    bdev: open block device as files · f3a60882
    Christian Brauner authored
    Add two new helpers to allow opening block devices as files.
    This is not the final infrastructure. This still opens the block device
    before opening a struct a file. Until we have removed all references to
    struct bdev_handle we can't switch the order:
    
    * Introduce blk_to_file_flags() to translate from block specific to
      flags usable to pen a new file.
    * Introduce bdev_file_open_by_{dev,path}().
    * Introduce temporary sb_bdev_handle() helper to retrieve a struct
      bdev_handle from a block device file and update places that directly
      reference struct bdev_handle to rely on it.
    * Don't count block device openes against the number of open files. A
      bdev_file_open_by_{dev,path}() file is never installed into any
      file descriptor table.
    
    One idea that came to mind was to use kernel_tmpfile_open() which
    would require us to pass a path and it would then call do_dentry_open()
    going through the regular fops->open::blkdev_open() path. But then we're
    back to the problem of routing block specific flags such as
    BLK_OPEN_RESTRICT_WRITES through the open path and would have to waste
    FMODE_* flags every time we add a new one. With this we can avoid using
    a flag bit and we have more leeway in how we open block devices from
    bdev_open_by_{dev,path}().
    
    Link: https://lore.kernel.org/r/20240123-vfs-bdev-file-v2-1-adbd023e19cc@kernel.orgSigned-off-by: default avatarChristian Brauner <brauner@kernel.org>
    f3a60882
inode.c 26.2 KB