John Garry <john.g.garry@xxxxxxxxxx> writes: > 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. > > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> > Signed-off-by: John Garry <john.g.garry@xxxxxxxxxx> > --- > 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; Shouldn't we "return -ENOTSUPP" ? Given we are later going to add support for ocount > sb_blocksize. -ritesh