On Fri, Mar 22, 2024 at 02:52:16PM +0800, Yu Kuai wrote: > Hi, > > 在 2024/03/22 14:39, Al Viro 写道: > > On Fri, Mar 22, 2024 at 06:37:18AM +0000, Al Viro wrote: > > > On Thu, Mar 21, 2024 at 08:15:06PM +0800, Yu Kuai wrote: > > > > > > > > blkdev_iomap_begin() etc. may be an arbitrary filesystem block device > > > > > inode. But why can't you use I_BDEV(inode->i_mapping->host) to get to the > > > > > block device instead of your file_bdev(inode->i_private)? I don't see any > > > > > advantage in stashing away that special bdev_file into inode->i_private but > > > > > perhaps I'm missing something... > > > > > > > > > > > > > Because we're goning to remove the 'block_device' from iomap and > > > > buffer_head, and replace it with a 'bdev_file'. > > > > > > What of that? file_inode(file)->f_mapping->host will give you bdevfs inode > > > just fine... > > > > file->f_mapping->host, obviously - sorry. > > . > > Yes, we already get bdev_inode this way, and use it in > blkdev_iomap_begin() and blkdev_get_block(), the problem is that if we > want to let iomap and buffer_head to use bdev_file for raw block fops as > well, we need a 'bdev_file' somehow. Explain, please. Why would anything care whether the file is bdevfs one or coming from devtmpfs/xfs/ext2/whatnot?