From: John Garry Date: Thu, 20 Mar 2025 12:02:49 +0000 (+0000) Subject: iomap: comment on atomic write checks in iomap_dio_bio_iter() X-Git-Tag: v6.15-rc1~249^2^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=aacd436e40b0a8f0e8411438c5b5db98bd8f0256;p=thirdparty%2Flinux.git iomap: comment on atomic write checks in iomap_dio_bio_iter() Help explain the code. Also clarify the comment for bio size check. Signed-off-by: John Garry Link: https://lore.kernel.org/r/20250320120250.4087011-3-john.g.garry@oracle.com Reviewed-by: Christoph Hellwig Signed-off-by: Christian Brauner --- diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 8c1bec4735868..b9f59ca43c150 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -350,6 +350,11 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) bio_opf |= REQ_OP_WRITE; if (iter->flags & IOMAP_ATOMIC_HW) { + /* + * Ensure that the mapping covers the full write + * length, otherwise it won't be submitted as a single + * bio, which is required to use hardware atomics. + */ if (length != iter->len) return -EINVAL; bio_opf |= REQ_ATOMIC; @@ -449,7 +454,7 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) n = bio->bi_iter.bi_size; if (WARN_ON_ONCE((bio_opf & REQ_ATOMIC) && n != length)) { /* - * This bio should have covered the complete length, + * An atomic write bio must cover the complete length, * which it doesn't, so error. We may need to zero out * the tail (complete FS block), similar to when * bio_iov_iter_get_pages() returns an error, above.