On Tue, Feb 13, 2024 at 10:37:10AM +0100, Pankaj Raghav (Samsung) wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > For block size larger than page size, the unit of efficient IO is > the block size, not the page size. Leaving stat() to report > PAGE_SIZE as the block size causes test programs like fsx to issue > illegal ranges for operations that require block size alignment > (e.g. fallocate() insert range). Hence update the preferred IO size > to reflect the block size in this case. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > [mcgrof: forward rebase in consideration for commit > dd2d535e3fb29d ("xfs: cleanup calculating the stat optimal I/O size")] > Signed-off-by: Luis Chamberlain <mcgrof@xxxxxxxxxx> > --- > fs/xfs/xfs_iops.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > index a0d77f5f512e..8791a9d80897 100644 > --- a/fs/xfs/xfs_iops.c > +++ b/fs/xfs/xfs_iops.c > @@ -515,6 +515,8 @@ xfs_stat_blksize( > struct xfs_inode *ip) > { > struct xfs_mount *mp = ip->i_mount; > + unsigned long default_size = max_t(unsigned long, PAGE_SIZE, > + mp->m_sb.sb_blocksize); Nit: wonky indentation, but... > > /* > * If the file blocks are being allocated from a realtime volume, then > @@ -543,7 +545,7 @@ xfs_stat_blksize( > return 1U << mp->m_allocsize_log; > } > > - return PAGE_SIZE; > + return default_size; ...why not return max_t(...) directly here? --D > } > > STATIC int > -- > 2.43.0 > >