Merge tag 'asoc-v5.4-2' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[linux-2.6-block.git] / mm / mincore.c
index c3f058bd0faf3e90857a762dd0828b621139ea5b..4fe91d4974362f53bedd42fcc3bbcd2424f6e279 100644 (file)
@@ -68,8 +68,16 @@ static unsigned char mincore_page(struct address_space *mapping, pgoff_t pgoff)
                 */
                if (xa_is_value(page)) {
                        swp_entry_t swp = radix_to_swp_entry(page);
-                       page = find_get_page(swap_address_space(swp),
-                                            swp_offset(swp));
+                       struct swap_info_struct *si;
+
+                       /* Prevent swap device to being swapoff under us */
+                       si = get_swap_device(swp);
+                       if (si) {
+                               page = find_get_page(swap_address_space(swp),
+                                                    swp_offset(swp));
+                               put_swap_device(si);
+                       } else
+                               page = NULL;
                }
        } else
                page = find_get_page(mapping, pgoff);