diff options
author | Mark Brown <broonie@kernel.org> | 2022-08-04 17:33:38 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2022-08-04 17:33:38 +0100 |
commit | c62bf06c94476b53b719dd246076f85a308c9358 (patch) | |
tree | fbf068251b945666e9c202c2df534de53157e04a | |
parent | 963ed0a570c06d79c9fac1511802d8d7540b3508 (diff) | |
parent | 03b33c09ea22fa89dd204ad0a2058e512c691b9f (diff) |
Merge branch 'for-next' of git://git.infradead.org/users/willy/pagecache.git
-rw-r--r-- | fs/btrfs/disk-io.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 397d8323196e..8a5c33faefe7 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -4044,7 +4044,7 @@ static int wait_dev_supers(struct btrfs_device *device, int max_mirrors) max_mirrors = BTRFS_SUPER_MIRROR_MAX; for (i = 0; i < max_mirrors; i++) { - struct page *page; + struct folio *folio; ret = btrfs_sb_log_location(device, i, READ, &bytenr); if (ret == -ENOENT) { @@ -4059,27 +4059,24 @@ static int wait_dev_supers(struct btrfs_device *device, int max_mirrors) device->commit_total_bytes) break; - page = find_get_page(device->bdev->bd_inode->i_mapping, + folio = filemap_get_folio(device->bdev->bd_inode->i_mapping, bytenr >> PAGE_SHIFT); - if (!page) { + if (!folio) { errors++; if (i == 0) primary_failed = true; continue; } - /* Page is submitted locked and unlocked once the IO completes */ - wait_on_page_locked(page); - if (PageError(page)) { + /* Folio is unlocked once the IO completes */ + folio_wait_locked(folio); + if (!folio_test_uptodate(folio)) { errors++; if (i == 0) primary_failed = true; } - /* Drop our reference */ - put_page(page); - - /* Drop the reference from the writing run */ - put_page(page); + /* Drop our reference and the one from the writing run */ + folio_put_refs(folio, 2); } /* log error, force error return */ |