Re: [PATCH 2/6] ext4: Check for atomic writes support in write iter

From: John Garry
Date: Fri Oct 25 2024 - 05:45:55 EST


On 25/10/2024 04:45, Ritesh Harjani (IBM) wrote:
Let's validate using generic_atomic_write_valid() in
ext4_file_write_iter() if the write request has IOCB_ATOMIC set.

Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx>
---
fs/ext4/file.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)

diff --git a/fs/ext4/file.c b/fs/ext4/file.c
index f14aed14b9cf..b06c5d34bbd2 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 (!IS_ALIGNED(len, EXT4_SB(inode->i_sb)->fs_awu_min) ||
+ len > EXT4_SB(inode->i_sb)->fs_awu_max)
+ return -EINVAL;

this looks ok, but the IS_ALIGNED() check looks odd. I am not sure why you don't just check that fs_awu_max >= len >= fs_awu_min

+
+ 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