]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fs/ntfs3: zero-fill folios beyond i_valid in ntfs_read_folio()
authorKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Fri, 12 Dec 2025 11:38:10 +0000 (14:38 +0300)
committerKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Mon, 29 Dec 2025 13:33:30 +0000 (13:33 +0000)
Handle ntfs_read_folio() early when the folio offset is beyond i_valid
by zero-filling the folio and marking it uptodate. This avoids needless
I/O and locking, improves read performance.

Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
fs/ntfs3/inode.c

index 1319b99dfeb4178b5d2b4e41e5a1d681fde39cc3..ace9873adaaef15d6071b57a63929da2b6e98053 100644 (file)
@@ -723,6 +723,19 @@ static int ntfs_read_folio(struct file *file, struct folio *folio)
        struct address_space *mapping = folio->mapping;
        struct inode *inode = mapping->host;
        struct ntfs_inode *ni = ntfs_i(inode);
+       loff_t vbo = folio_pos(folio);
+
+       if (unlikely(is_bad_ni(ni))) {
+               folio_unlock(folio);
+               return -EIO;
+       }
+
+       if (ni->i_valid <= vbo) {
+               folio_zero_range(folio, 0, folio_size(folio));
+               folio_mark_uptodate(folio);
+               folio_unlock(folio);
+               return 0;
+       }
 
        if (is_resident(ni)) {
                ni_lock(ni);