On Wed, Oct 16, 2024 at 10:03:24AM +0000, John Garry wrote:
> Validate that an atomic write adheres to length/offset rules. Currently
> we can only write a single FS block.
>
> For an IOCB with IOCB_ATOMIC set to get as far as xfs_file_write_iter(),
> FMODE_CAN_ATOMIC_WRITE will need to be set for the file; for this,
> ATOMICWRITES flags would also need to be set for the inode.
>
> Signed-off-by: John Garry <john.g.garry@oracle.com>
This looks ok to me now,
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> ---
> fs/xfs/xfs_file.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
> index b19916b11fd5..1ccbc1eb75c9 100644
> --- a/fs/xfs/xfs_file.c
> +++ b/fs/xfs/xfs_file.c
> @@ -852,6 +852,20 @@ xfs_file_write_iter(
> if (IS_DAX(inode))
> return xfs_file_dax_write(iocb, from);
>
> + if (iocb->ki_flags & IOCB_ATOMIC) {
> + /*
> + * Currently only atomic writing of a single FS block is
> + * supported. It would be possible to atomic write smaller than
> + * a FS block, but there is no requirement to support this.
> + * Note that iomap also does not support this yet.
> + */
> + if (ocount != ip->i_mount->m_sb.sb_blocksize)
> + return -EINVAL;
> + ret = generic_atomic_write_valid(iocb, from);
> + if (ret)
> + return ret;
> + }
> +
> if (iocb->ki_flags & IOCB_DIRECT) {
> /*
> * Allow a directio write to fall back to a buffered
> --
> 2.31.1
>
>