diff options
author | Mark Brown <broonie@kernel.org> | 2022-08-05 16:08:41 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2022-08-05 16:08:41 +0100 |
commit | 87757c68cfd1389acc5f9cbff1f5d1365fac0834 (patch) | |
tree | dad3c209f0b8b8cac1917474217b2856906d498a | |
parent | 5a7490183282cd088a25f8d6524659e751af673d (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 */ |