]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
mm/filemap: fix miscalculated file range for filemap_fdatawrite_range_kick()
authorJingbo Xu <jefflexu@linux.alibaba.com>
Tue, 18 Feb 2025 12:02:08 +0000 (20:02 +0800)
committerChristian Brauner <brauner@kernel.org>
Fri, 21 Feb 2025 13:09:47 +0000 (14:09 +0100)
iocb->ki_pos has been updated with the number of written bytes since
generic_perform_write().

Besides __filemap_fdatawrite_range() accepts the inclusive end of the
data range.

Fixes: 1d4457576570 ("mm: call filemap_fdatawrite_range_kick() after IOCB_DONTCACHE issue")
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
Link: https://lore.kernel.org/r/20250218120209.88093-2-jefflexu@linux.alibaba.com
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Christian Brauner <brauner@kernel.org>
include/linux/fs.h
mm/filemap.c

index 9346adf28f7bc4724d92b1c903272b841f8ed264..2788df98080f8e088c9b63ee57fc611722f555ed 100644 (file)
@@ -2975,8 +2975,8 @@ static inline ssize_t generic_write_sync(struct kiocb *iocb, ssize_t count)
        } else if (iocb->ki_flags & IOCB_DONTCACHE) {
                struct address_space *mapping = iocb->ki_filp->f_mapping;
 
-               filemap_fdatawrite_range_kick(mapping, iocb->ki_pos,
-                                             iocb->ki_pos + count);
+               filemap_fdatawrite_range_kick(mapping, iocb->ki_pos - count,
+                                             iocb->ki_pos - 1);
        }
 
        return count;
index 804d7365680c1cef198ed453f1bd17bc66a7decc..d4564a79eb3536c5322e6075b19bab0d687647e3 100644 (file)
@@ -445,7 +445,7 @@ EXPORT_SYMBOL(filemap_fdatawrite_range);
  * filemap_fdatawrite_range_kick - start writeback on a range
  * @mapping:   target address_space
  * @start:     index to start writeback on
- * @end:       last (non-inclusive) index for writeback
+ * @end:       last (inclusive) index for writeback
  *
  * This is a non-integrity writeback helper, to start writing back folios
  * for the indicated range.