Re: [PATCH v3] iomap: follow the alignment requirement for iomap_dio_hole_iter()

Christoph Hellwig <[email protected]> Tue, 4 Aug 2026 06:01:34 -0700
Newsgroups gmane.comp.file-systems.btrfs,gmane.linux.file-systems
Message-ID <[email protected]>
On Sat, Aug 01, 2026 at 07:17:26AM +0930, Qu Wenruo wrote:
> +++ b/fs/iomap/direct-io.c
> @@ -409,7 +409,10 @@ static inline unsigned int iomap_dio_alignment(struct inode *inode,
>  {
>  	if (dio_flags & IOMAP_DIO_FSBLOCK_ALIGNED)
>  		return i_blocksize(inode);
> -	return bdev_logical_block_size(bdev);
> +	/* @bdev can be NULL for hole cases. */
> +	if (bdev)
> +		return bdev_logical_block_size(bdev);
> +	return SECTOR_SIZE;

No.  As said for previous versions you should not use
iomap_dio_alignment.  There is no such things as sub-fsblock alignment
for holes.  All mappings need to be aligned on fs blocks, you can do
sub-mapping granularity I/O in it, but not align on it.  So don't
call iomap_dio_alignment, but instead align down the shortened range
from the fault to a fs block boundary.

And really sort out the btrfs locking that we can't get rid of this
premature faulting as it keeps messing up core code way too much.