Re: [PATCH 07/43] xfs: cleanup xfs_vn_getattr

Darrick J. Wong
2024-12-12T21:24:33Z

On Wed, Dec 11, 2024 at 09:54:32AM +0100, Christoph Hellwig wrote:
> Split the two bits of optional statx reporting into their own helpers
> so that they are self-contained instead of deeply indented in the main
> getattr handler.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Looks ok,
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
> fs/xfs/xfs_iops.c | 47 +++++++++++++++++++++++------------------------
> 1 file changed, 23 insertions(+), 24 deletions(-)
>
> diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
> index 207e0dadffc3..6b0228a21617 100644
> --- a/fs/xfs/xfs_iops.c
> +++ b/fs/xfs/xfs_iops.c
> @@ -573,17 +573,28 @@ xfs_stat_blksize(
> }
>
> static void
> -xfs_get_atomic_write_attr(
> +xfs_report_dioalign(
> struct xfs_inode *ip,
> - unsigned int *unit_min,
> - unsigned int *unit_max)
> + struct kstat *stat)
> {
> - if (!xfs_inode_can_atomicwrite(ip)) {
> - *unit_min = *unit_max = 0;
> - return;
> - }
> + struct xfs_buftarg *target = xfs_inode_buftarg(ip);
> + struct block_device *bdev = target->bt_bdev;
>
> - *unit_min = *unit_max = ip->i_mount->m_sb.sb_blocksize;
> + stat->result_mask |= STATX_DIOALIGN;
> + stat->dio_mem_align = bdev_dma_alignment(bdev) + 1;
> + stat->dio_offset_align = bdev_logical_block_size(bdev);
> +}
> +
> +static void
> +xfs_report_atomic_write(
> + struct xfs_inode *ip,
> + struct kstat *stat)
> +{
> + unsigned int unit_min = 0, unit_max = 0;
> +
> + if (xfs_inode_can_atomicwrite(ip))
> + unit_min = unit_max = ip->i_mount->m_sb.sb_blocksize;
> + generic_fill_statx_atomic_writes(stat, unit_min, unit_max);
> }
>
> STATIC int
> @@ -647,22 +658,10 @@ xfs_vn_getattr(
> stat->rdev = inode->i_rdev;
> break;
> case S_IFREG:
> - if (request_mask & STATX_DIOALIGN) {
> - struct xfs_buftarg *target = xfs_inode_buftarg(ip);
> - struct block_device *bdev = target->bt_bdev;
> -
> - stat->result_mask |= STATX_DIOALIGN;
> - stat->dio_mem_align = bdev_dma_alignment(bdev) + 1;
> - stat->dio_offset_align = bdev_logical_block_size(bdev);
> - }
> - if (request_mask & STATX_WRITE_ATOMIC) {
> - unsigned int unit_min, unit_max;
> -
> - xfs_get_atomic_write_attr(ip, &unit_min,
> - &unit_max);
> - generic_fill_statx_atomic_writes(stat,
> - unit_min, unit_max);
> - }
> + if (request_mask & STATX_DIOALIGN)
> + xfs_report_dioalign(ip, stat);
> + if (request_mask & STATX_WRITE_ATOMIC)
> + xfs_report_atomic_write(ip, stat);
> fallthrough;
> default:
> stat->blksize = xfs_stat_blksize(ip);
> --
> 2.45.2
>
>