Commit 4d89b671 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Konstantin Komarov

ntfs3: Convert ni_readpage_cmpr() to take a folio

We still use an array of pages for the decompression, but this removes
a few calls to compound_head().
Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
parent 584f60ba
...@@ -2087,12 +2087,12 @@ int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo, ...@@ -2087,12 +2087,12 @@ int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo,
* When decompressing, we typically obtain more than one page per reference. * When decompressing, we typically obtain more than one page per reference.
* We inject the additional pages into the page cache. * We inject the additional pages into the page cache.
*/ */
int ni_readpage_cmpr(struct ntfs_inode *ni, struct page *page) int ni_readpage_cmpr(struct ntfs_inode *ni, struct folio *folio)
{ {
int err; int err;
struct ntfs_sb_info *sbi = ni->mi.sbi; struct ntfs_sb_info *sbi = ni->mi.sbi;
struct address_space *mapping = page->mapping; struct address_space *mapping = folio->mapping;
pgoff_t index = page->index; pgoff_t index = folio->index;
u64 frame_vbo, vbo = (u64)index << PAGE_SHIFT; u64 frame_vbo, vbo = (u64)index << PAGE_SHIFT;
struct page **pages = NULL; /* Array of at most 16 pages. stack? */ struct page **pages = NULL; /* Array of at most 16 pages. stack? */
u8 frame_bits; u8 frame_bits;
...@@ -2102,7 +2102,8 @@ int ni_readpage_cmpr(struct ntfs_inode *ni, struct page *page) ...@@ -2102,7 +2102,8 @@ int ni_readpage_cmpr(struct ntfs_inode *ni, struct page *page)
struct page *pg; struct page *pg;
if (vbo >= i_size_read(&ni->vfs_inode)) { if (vbo >= i_size_read(&ni->vfs_inode)) {
SetPageUptodate(page); folio_zero_range(folio, 0, folio_size(folio));
folio_mark_uptodate(folio);
err = 0; err = 0;
goto out; goto out;
} }
...@@ -2126,7 +2127,7 @@ int ni_readpage_cmpr(struct ntfs_inode *ni, struct page *page) ...@@ -2126,7 +2127,7 @@ int ni_readpage_cmpr(struct ntfs_inode *ni, struct page *page)
goto out; goto out;
} }
pages[idx] = page; pages[idx] = &folio->page;
index = frame_vbo >> PAGE_SHIFT; index = frame_vbo >> PAGE_SHIFT;
gfp_mask = mapping_gfp_mask(mapping); gfp_mask = mapping_gfp_mask(mapping);
...@@ -2156,7 +2157,7 @@ int ni_readpage_cmpr(struct ntfs_inode *ni, struct page *page) ...@@ -2156,7 +2157,7 @@ int ni_readpage_cmpr(struct ntfs_inode *ni, struct page *page)
out: out:
/* At this point, err contains 0 or -EIO depending on the "critical" page. */ /* At this point, err contains 0 or -EIO depending on the "critical" page. */
kfree(pages); kfree(pages);
unlock_page(page); folio_unlock(folio);
return err; return err;
} }
......
...@@ -727,7 +727,7 @@ static int ntfs_read_folio(struct file *file, struct folio *folio) ...@@ -727,7 +727,7 @@ static int ntfs_read_folio(struct file *file, struct folio *folio)
if (is_compressed(ni)) { if (is_compressed(ni)) {
ni_lock(ni); ni_lock(ni);
err = ni_readpage_cmpr(ni, &folio->page); err = ni_readpage_cmpr(ni, folio);
ni_unlock(ni); ni_unlock(ni);
return err; return err;
} }
......
...@@ -564,7 +564,7 @@ int ni_write_inode(struct inode *inode, int sync, const char *hint); ...@@ -564,7 +564,7 @@ int ni_write_inode(struct inode *inode, int sync, const char *hint);
#define _ni_write_inode(i, w) ni_write_inode(i, w, __func__) #define _ni_write_inode(i, w) ni_write_inode(i, w, __func__)
int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo, int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo,
__u64 vbo, __u64 len); __u64 vbo, __u64 len);
int ni_readpage_cmpr(struct ntfs_inode *ni, struct page *page); int ni_readpage_cmpr(struct ntfs_inode *ni, struct folio *folio);
int ni_decompress_file(struct ntfs_inode *ni); int ni_decompress_file(struct ntfs_inode *ni);
int ni_read_frame(struct ntfs_inode *ni, u64 frame_vbo, struct page **pages, int ni_read_frame(struct ntfs_inode *ni, u64 frame_vbo, struct page **pages,
u32 pages_per_frame); u32 pages_per_frame);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment