mm: filter out swapin error entry in shmem mapping
There might be swapin error entries in shmem mapping. Filter them out to avoid "Bad swap file entry" complaint. Link: https://lkml.kernel.org/r/20220519125030.21486-6-linmiaohe@huawei.com Signed-off-by: Miaohe Lin <linmiaohe@huawei.com> Reviewed-by: Naoya Horiguchi <naoya.horiguchi@nec.com> Cc: Alistair Popple <apopple@nvidia.com> Cc: David Hildenbrand <david@redhat.com> Cc: David Howells <dhowells@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: NeilBrown <neilb@suse.de> Cc: Peter Xu <peterx@redhat.com> Cc: Ralph Campbell <rcampbell@nvidia.com> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
6cec2b95da
commit
ba6851b45d
|
@ -248,10 +248,13 @@ static void force_shm_swapin_readahead(struct vm_area_struct *vma,
|
||||||
|
|
||||||
if (!xa_is_value(page))
|
if (!xa_is_value(page))
|
||||||
continue;
|
continue;
|
||||||
|
swap = radix_to_swp_entry(page);
|
||||||
|
/* There might be swapin error entries in shmem mapping. */
|
||||||
|
if (non_swap_entry(swap))
|
||||||
|
continue;
|
||||||
xas_pause(&xas);
|
xas_pause(&xas);
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
||||||
swap = radix_to_swp_entry(page);
|
|
||||||
page = read_swap_cache_async(swap, GFP_HIGHUSER_MOVABLE,
|
page = read_swap_cache_async(swap, GFP_HIGHUSER_MOVABLE,
|
||||||
NULL, 0, false, &splug);
|
NULL, 0, false, &splug);
|
||||||
if (page)
|
if (page)
|
||||||
|
|
|
@ -410,6 +410,9 @@ struct page *find_get_incore_page(struct address_space *mapping, pgoff_t index)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
swp = radix_to_swp_entry(page);
|
swp = radix_to_swp_entry(page);
|
||||||
|
/* There might be swapin error entries in shmem mapping. */
|
||||||
|
if (non_swap_entry(swp))
|
||||||
|
return NULL;
|
||||||
/* Prevent swapoff from happening to us */
|
/* Prevent swapoff from happening to us */
|
||||||
si = get_swap_device(swp);
|
si = get_swap_device(swp);
|
||||||
if (!si)
|
if (!si)
|
||||||
|
|
Loading…
Reference in New Issue