Message ID | 20240213093713.1753368-12-kernel@pankajraghav.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | enable bs > ps in XFS | expand |
On Tue, Feb 13, 2024 at 10:37:10AM +0100, Pankaj Raghav (Samsung) wrote: > From: Dave Chinner <dchinner@redhat.com> > > 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@redhat.com> > [mcgrof: forward rebase in consideration for commit > dd2d535e3fb29d ("xfs: cleanup calculating the stat optimal I/O size")] > Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> > --- > 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 > >
> > 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? Sounds good. I will add this change. > > --D > > > } > > > > STATIC int > > -- > > 2.43.0 > > > >
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); /* * 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; } STATIC int