zram: use __bio_add_page for adding single page to bio
[linux-block.git] / mm / swap_state.c
index 7a003d8abb37bcf750da82940197bdc010b49aef..b76a65ac28b319ca2a73b33a430a0195e8584b62 100644 (file)
@@ -336,7 +336,7 @@ struct folio *swap_cache_get_folio(swp_entry_t entry,
        struct folio *folio;
 
        folio = filemap_get_folio(swap_address_space(entry), swp_offset(entry));
-       if (folio) {
+       if (!IS_ERR(folio)) {
                bool vma_ra = swap_use_vma_readahead();
                bool readahead;
 
@@ -366,6 +366,8 @@ struct folio *swap_cache_get_folio(swp_entry_t entry,
                        if (!vma || !vma_ra)
                                atomic_inc(&swapin_readahead_hits);
                }
+       } else {
+               folio = NULL;
        }
 
        return folio;
@@ -386,25 +388,26 @@ struct folio *filemap_get_incore_folio(struct address_space *mapping,
 {
        swp_entry_t swp;
        struct swap_info_struct *si;
-       struct folio *folio = __filemap_get_folio(mapping, index, FGP_ENTRY, 0);
+       struct folio *folio = filemap_get_entry(mapping, index);
 
+       if (!folio)
+               return ERR_PTR(-ENOENT);
        if (!xa_is_value(folio))
-               goto out;
+               return folio;
        if (!shmem_mapping(mapping))
-               return NULL;
+               return ERR_PTR(-ENOENT);
 
        swp = radix_to_swp_entry(folio);
        /* There might be swapin error entries in shmem mapping. */
        if (non_swap_entry(swp))
-               return NULL;
+               return ERR_PTR(-ENOENT);
        /* Prevent swapoff from happening to us */
        si = get_swap_device(swp);
        if (!si)
-               return NULL;
+               return ERR_PTR(-ENOENT);
        index = swp_offset(swp);
        folio = filemap_get_folio(swap_address_space(swp), index);
        put_swap_device(si);
-out:
        return folio;
 }
 
@@ -431,7 +434,7 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
                folio = filemap_get_folio(swap_address_space(entry),
                                                swp_offset(entry));
                put_swap_device(si);
-               if (folio)
+               if (!IS_ERR(folio))
                        return folio_file_page(folio, swp_offset(entry));
 
                /*