From: Andrew Morton generic_unplug_device() is wrong for DM backnig devices. So instead, mark every BIO as being `synchronous'. It'll blow a little bit more CPU, but that's OK, and the IO scheduling behaviour will be the same. Cc: Pavel Machek Cc: "Rafael J. Wysocki" Cc: Jens Axboe Cc: Laurent Riffard Signed-off-by: Andrew Morton --- kernel/power/swap.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) diff -puN kernel/power/swap.c~swsusp-read-speedup-fix-fix-2 kernel/power/swap.c --- a/kernel/power/swap.c~swsusp-read-speedup-fix-fix-2 +++ a/kernel/power/swap.c @@ -217,7 +217,6 @@ static int wait_on_bio_chain(struct bio bio = *bio_chain; if (bio == NULL) return 0; - generic_unplug_device(bdev_get_queue(bio->bi_bdev)); while (bio) { struct page *page; @@ -430,7 +429,7 @@ static int submit(int rw, pgoff_t page_o get_page(page); bio->bi_private = *bio_chain; *bio_chain = bio; - submit_bio(rw, bio); + submit_bio(rw | (1 << BIO_RW_SYNC), bio); } return 0; } _