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@xxxxxxxxxx> This looks ok to me now, Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --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 > >