Skip to content

Commit

Permalink
btrfs: convert can_finish_ordered_extent() to use a folio
Browse files Browse the repository at this point in the history
Pass in a folio instead, and use a folio instead of a page.

Signed-off-by: Josef Bacik <[email protected]>
Reviewed-by: David Sterba <[email protected]>
Signed-off-by: David Sterba <[email protected]>
  • Loading branch information
josefbacik authored and kdave committed Sep 10, 2024
1 parent 7e755aa commit 0a57763
Showing 1 changed file with 11 additions and 10 deletions.
21 changes: 11 additions & 10 deletions fs/btrfs/ordered-data.c
Original file line number Diff line number Diff line change
Expand Up @@ -332,29 +332,28 @@ static void finish_ordered_fn(struct btrfs_work *work)
}

static bool can_finish_ordered_extent(struct btrfs_ordered_extent *ordered,
struct page *page, u64 file_offset,
struct folio *folio, u64 file_offset,
u64 len, bool uptodate)
{
struct btrfs_inode *inode = ordered->inode;
struct btrfs_fs_info *fs_info = inode->root->fs_info;

lockdep_assert_held(&inode->ordered_tree_lock);

if (page) {
ASSERT(page->mapping);
ASSERT(page_offset(page) <= file_offset);
ASSERT(file_offset + len <= page_offset(page) + PAGE_SIZE);
if (folio) {
ASSERT(folio->mapping);
ASSERT(folio_pos(folio) <= file_offset);
ASSERT(file_offset + len <= folio_pos(folio) + folio_size(folio));

/*
* Ordered (Private2) bit indicates whether we still have
* pending io unfinished for the ordered extent.
*
* If there's no such bit, we need to skip to next range.
*/
if (!btrfs_folio_test_ordered(fs_info, page_folio(page),
file_offset, len))
if (!btrfs_folio_test_ordered(fs_info, folio, file_offset, len))
return false;
btrfs_folio_clear_ordered(fs_info, page_folio(page), file_offset, len);
btrfs_folio_clear_ordered(fs_info, folio, file_offset, len);
}

/* Now we're fine to update the accounting. */
Expand Down Expand Up @@ -408,7 +407,8 @@ void btrfs_finish_ordered_extent(struct btrfs_ordered_extent *ordered,
trace_btrfs_finish_ordered_extent(inode, file_offset, len, uptodate);

spin_lock_irqsave(&inode->ordered_tree_lock, flags);
ret = can_finish_ordered_extent(ordered, page, file_offset, len, uptodate);
ret = can_finish_ordered_extent(ordered, page_folio(page), file_offset,
len, uptodate);
spin_unlock_irqrestore(&inode->ordered_tree_lock, flags);

/*
Expand Down Expand Up @@ -524,7 +524,8 @@ void btrfs_mark_ordered_io_finished(struct btrfs_inode *inode,
ASSERT(end + 1 - cur < U32_MAX);
len = end + 1 - cur;

if (can_finish_ordered_extent(entry, page, cur, len, uptodate)) {
if (can_finish_ordered_extent(entry, page_folio(page), cur, len,
uptodate)) {
spin_unlock_irqrestore(&inode->ordered_tree_lock, flags);
btrfs_queue_ordered_fn(entry);
spin_lock_irqsave(&inode->ordered_tree_lock, flags);
Expand Down

0 comments on commit 0a57763

Please sign in to comment.