]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
btrfs: Use a folio in wait_dev_supers()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Tue, 17 May 2022 22:03:27 +0000 (18:03 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 29 Jun 2022 12:51:07 +0000 (08:51 -0400)
Remove a use of PageError and optimise putting the page reference twice.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
fs/btrfs/disk-io.c

index 4ba005c4198368214fb4b055fd15d02af19e3b06..dbac856565718b5849d4c5fc728609221281a5fe 100644 (file)
@@ -4178,7 +4178,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) {
@@ -4193,27 +4193,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 */