mm: use SWP_SYNCHRONOUS_IO more intelligently
authorChristoph Hellwig <hch@lst.de>
Thu, 24 Sep 2020 06:51:37 +0000 (08:51 +0200)
committerJens Axboe <axboe@kernel.dk>
Thu, 24 Sep 2020 19:43:39 +0000 (13:43 -0600)
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 <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
mm/page_io.c

index e485a6e..b199b87 100644 (file)
@@ -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;