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>
---
 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 ccda7679008851..442061348dfb26 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.27.0

Reply via email to