From: Ritesh Harjani (IBM) Date: Tue, 5 Nov 2024 00:22:58 +0000 (-0800) Subject: ext4: Check for atomic writes support in write iter X-Git-Tag: v6.13-rc1~220^2~1^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=43c696f9d094061e958e31be7f1dae66bc25d389;p=thirdparty%2Fkernel%2Flinux.git ext4: Check for atomic writes support in write iter 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 Reviewed-by: Darrick J. Wong Signed-off-by: Ritesh Harjani (IBM) Signed-off-by: Darrick J. Wong Reviewed-by: Jan Kara --- diff --git a/fs/ext4/file.c b/fs/ext4/file.c index f14aed14b9cf3..a7b9b9751a3f1 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