Skip to content

Commit 3060b6e

Browse files
Matthew Wilcoxtytso
authored andcommitted
ext4: Convert mext_page_mkuptodate() to take a folio
Use a folio throughout. Does not support large folios due to an array sized for MAX_BUF_PER_PAGE, but it does remove a few calls to compound_head(). Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Theodore Ts'o <[email protected]>
1 parent f2b229a commit 3060b6e

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

fs/ext4/move_extent.c

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -168,25 +168,27 @@ mext_folio_double_lock(struct inode *inode1, struct inode *inode2,
168168

169169
/* Force page buffers uptodate w/o dropping page's lock */
170170
static int
171-
mext_page_mkuptodate(struct page *page, unsigned from, unsigned to)
171+
mext_page_mkuptodate(struct folio *folio, unsigned from, unsigned to)
172172
{
173-
struct inode *inode = page->mapping->host;
173+
struct inode *inode = folio->mapping->host;
174174
sector_t block;
175175
struct buffer_head *bh, *head, *arr[MAX_BUF_PER_PAGE];
176176
unsigned int blocksize, block_start, block_end;
177177
int i, err, nr = 0, partial = 0;
178-
BUG_ON(!PageLocked(page));
179-
BUG_ON(PageWriteback(page));
178+
BUG_ON(!folio_test_locked(folio));
179+
BUG_ON(folio_test_writeback(folio));
180180

181-
if (PageUptodate(page))
181+
if (folio_test_uptodate(folio))
182182
return 0;
183183

184184
blocksize = i_blocksize(inode);
185-
if (!page_has_buffers(page))
186-
create_empty_buffers(page, blocksize, 0);
185+
head = folio_buffers(folio);
186+
if (!head) {
187+
create_empty_buffers(&folio->page, blocksize, 0);
188+
head = folio_buffers(folio);
189+
}
187190

188-
head = page_buffers(page);
189-
block = (sector_t)page->index << (PAGE_SHIFT - inode->i_blkbits);
191+
block = (sector_t)folio->index << (PAGE_SHIFT - inode->i_blkbits);
190192
for (bh = head, block_start = 0; bh != head || !block_start;
191193
block++, block_start = block_end, bh = bh->b_this_page) {
192194
block_end = block_start + blocksize;
@@ -200,11 +202,11 @@ mext_page_mkuptodate(struct page *page, unsigned from, unsigned to)
200202
if (!buffer_mapped(bh)) {
201203
err = ext4_get_block(inode, block, bh, 0);
202204
if (err) {
203-
SetPageError(page);
205+
folio_set_error(folio);
204206
return err;
205207
}
206208
if (!buffer_mapped(bh)) {
207-
zero_user(page, block_start, blocksize);
209+
folio_zero_range(folio, block_start, blocksize);
208210
set_buffer_uptodate(bh);
209211
continue;
210212
}
@@ -226,7 +228,7 @@ mext_page_mkuptodate(struct page *page, unsigned from, unsigned to)
226228
}
227229
out:
228230
if (!partial)
229-
SetPageUptodate(page);
231+
folio_mark_uptodate(folio);
230232
return 0;
231233
}
232234

@@ -354,7 +356,7 @@ move_extent_per_page(struct file *o_filp, struct inode *donor_inode,
354356
goto unlock_folios;
355357
}
356358
data_copy:
357-
*err = mext_page_mkuptodate(&folio[0]->page, from, from + replaced_size);
359+
*err = mext_page_mkuptodate(folio[0], from, from + replaced_size);
358360
if (*err)
359361
goto unlock_folios;
360362

0 commit comments

Comments
 (0)