There is no point in trying to call bdev_read_page if SWP_SYNCHRONOUS_IO
is not set, as the device won't support it.

Signed-off-by: Christoph Hellwig <h...@lst.de>
Reviewed-by: Jan Kara <j...@suse.cz>
Reviewed-by: Johannes Thumshirn <johannes.thumsh...@wdc.com>
---
 mm/page_io.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/mm/page_io.c b/mm/page_io.c
index e485a6e8a6cddb..b199b87e0aa92b 100644
--- a/mm/page_io.c
+++ b/mm/page_io.c
@@ -403,15 +403,17 @@ int swap_readpage(struct page *page, bool synchronous)
                goto out;
        }
 
-       ret = bdev_read_page(sis->bdev, swap_page_sector(page), page);
-       if (!ret) {
-               if (trylock_page(page)) {
-                       swap_slot_free_notify(page);
-                       unlock_page(page);
-               }
+       if (sis->flags & SWP_SYNCHRONOUS_IO) {
+               ret = bdev_read_page(sis->bdev, swap_page_sector(page), page);
+               if (!ret) {
+                       if (trylock_page(page)) {
+                               swap_slot_free_notify(page);
+                               unlock_page(page);
+                       }
 
-               count_vm_event(PSWPIN);
-               goto out;
+                       count_vm_event(PSWPIN);
+                       goto out;
+               }
        }
 
        ret = 0;
-- 
2.28.0

Reply via email to