On Wed, Oct 09, 2019 at 01:42:00PM +0300, Nikolay Borisov wrote: > > > On 7.10.19 г. 22:37 ч., David Sterba wrote: > > To remove use of extent_map::bdev we need to find a replacement, and the > > latest_bdev is the only one we can use here, because inode::i_bdev and > > superblock::s_bdev are NULL. > > > > The only thing that DIO code uses from the bdev is the blocksize to > > perform alignment checks in do_blockdev_direct_IO, but we do them in > > btrfs code before any call to DIO. We can't pass NULL because there are > > nit: This is not entirely correct. In fact map_bh in > do_blockdev_direct_IO gets filled in : > > do_direct_IO > get_more_blocks > sdio->get_block() <-- this is btrfs_get_blocks_direct > > Subsequently the map_bh->b_dev member is used in > clean_bdev_aliases and dio_new_bio to set the bio's bdev to that of the > buffer_head. However, because we have provided a submit function > dio_bio_submit calls our submission function and ignores the bdev. You're right, and actually I got crashes in clean_bdev_aliases when I supplied a NULL bdev, so I'll add it to the changelog. Thanks.
