mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 06:31:52 +00:00
btrfs: support subpage in endio_readpage_update_page_status()
To handle subpage status update, add the following: - Use btrfs_page_*() subpage-aware helpers to update page status Now we can handle both cases well. - No page unlock for subpage metadata Since subpage metadata doesn't utilize page locking at all, skip it. For subpage data locking, it's handled in later commits. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
4012daf769
commit
4325cb2293
@ -2840,15 +2840,24 @@ update:
|
||||
processed->uptodate = uptodate;
|
||||
}
|
||||
|
||||
static void endio_readpage_update_page_status(struct page *page, bool uptodate)
|
||||
static void endio_readpage_update_page_status(struct page *page, bool uptodate,
|
||||
u64 start, u32 len)
|
||||
{
|
||||
struct btrfs_fs_info *fs_info = btrfs_sb(page->mapping->host->i_sb);
|
||||
|
||||
ASSERT(page_offset(page) <= start &&
|
||||
start + len <= page_offset(page) + PAGE_SIZE);
|
||||
|
||||
if (uptodate) {
|
||||
SetPageUptodate(page);
|
||||
btrfs_page_set_uptodate(fs_info, page, start, len);
|
||||
} else {
|
||||
ClearPageUptodate(page);
|
||||
SetPageError(page);
|
||||
btrfs_page_clear_uptodate(fs_info, page, start, len);
|
||||
btrfs_page_set_error(fs_info, page, start, len);
|
||||
}
|
||||
unlock_page(page);
|
||||
|
||||
if (fs_info->sectorsize == PAGE_SIZE)
|
||||
unlock_page(page);
|
||||
/* Subpage locking will be handled in later patches */
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2985,7 +2994,7 @@ readpage_ok:
|
||||
bio_offset += len;
|
||||
|
||||
/* Update page status and unlock */
|
||||
endio_readpage_update_page_status(page, uptodate);
|
||||
endio_readpage_update_page_status(page, uptodate, start, len);
|
||||
endio_readpage_release_extent(&processed, BTRFS_I(inode),
|
||||
start, end, uptodate);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user