Message ID | ad2255a2fb9a4f5a30e4265ca94b6361db8ee76a.1730437365.git.ritesh.list@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | ext4: Add atomic writes support for DIO | expand |
On Fri 01-11-24 12:20:52, Ritesh Harjani (IBM) wrote: > Let's validate the given constraints for atomic write request. > Otherwise it will fail with -EINVAL. Currently atomic write is only > supported on DIO, so for buffered-io it will return -EOPNOTSUPP. > > Reviewed-by: John Garry <john.g.garry@oracle.com> > Reviewed-by: Darrick J. Wong <djwong@kernel.org> > Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/ext4/file.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/fs/ext4/file.c b/fs/ext4/file.c > index f14aed14b9cf..a7b9b9751a3f 100644 > --- a/fs/ext4/file.c > +++ b/fs/ext4/file.c > @@ -692,6 +692,20 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from) > if (IS_DAX(inode)) > return ext4_dax_write_iter(iocb, from); > #endif > + > + if (iocb->ki_flags & IOCB_ATOMIC) { > + size_t len = iov_iter_count(from); > + int ret; > + > + if (len < EXT4_SB(inode->i_sb)->s_awu_min || > + len > EXT4_SB(inode->i_sb)->s_awu_max) > + return -EINVAL; > + > + ret = generic_atomic_write_valid(iocb, from); > + if (ret) > + return ret; > + } > + > if (iocb->ki_flags & IOCB_DIRECT) > return ext4_dio_write_iter(iocb, from); > else > -- > 2.46.0 >
diff --git a/fs/ext4/file.c b/fs/ext4/file.c index f14aed14b9cf..a7b9b9751a3f 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -692,6 +692,20 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from) if (IS_DAX(inode)) return ext4_dax_write_iter(iocb, from); #endif + + if (iocb->ki_flags & IOCB_ATOMIC) { + size_t len = iov_iter_count(from); + int ret; + + if (len < EXT4_SB(inode->i_sb)->s_awu_min || + len > EXT4_SB(inode->i_sb)->s_awu_max) + return -EINVAL; + + ret = generic_atomic_write_valid(iocb, from); + if (ret) + return ret; + } + if (iocb->ki_flags & IOCB_DIRECT) return ext4_dio_write_iter(iocb, from); else