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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxx>

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

--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
> 
> 




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux