]> git.ipfire.org Git - thirdparty/linux.git/blobdiff - mm/page_io.c
ARM: ixp4xx: don't select SERIAL_OF_PLATFORM
[thirdparty/linux.git] / mm / page_io.c
index d4d1c89bcdddcef43dfa04fa02926f21fba228fb..2e8019d0e048dde3ea8a7507f085bb1570553604 100644 (file)
@@ -140,7 +140,7 @@ out:
        unlock_page(page);
        WRITE_ONCE(bio->bi_private, NULL);
        bio_put(bio);
-       wake_up_process(waiter);
+       blk_wake_io_task(waiter);
        put_task_struct(waiter);
 }
 
@@ -339,7 +339,7 @@ int __swap_writepage(struct page *page, struct writeback_control *wbc,
                goto out;
        }
        bio->bi_opf = REQ_OP_WRITE | REQ_SWAP | wbc_to_write_flags(wbc);
-       bio_associate_blkcg_from_page(bio, page);
+       bio_associate_blkg_from_page(bio, page);
        count_swpout_vm_event(page);
        set_page_writeback(page);
        unlock_page(page);
@@ -401,6 +401,8 @@ int swap_readpage(struct page *page, bool synchronous)
        get_task_struct(current);
        bio->bi_private = current;
        bio_set_op_attrs(bio, REQ_OP_READ, 0);
+       if (synchronous)
+               bio->bi_opf |= REQ_HIPRI;
        count_vm_event(PSWPIN);
        bio_get(bio);
        qc = submit_bio(bio);
@@ -409,8 +411,8 @@ int swap_readpage(struct page *page, bool synchronous)
                if (!READ_ONCE(bio->bi_private))
                        break;
 
-               if (!blk_poll(disk->queue, qc))
-                       break;
+               if (!blk_poll(disk->queue, qc, true))
+                       io_schedule();
        }
        __set_current_state(TASK_RUNNING);
        bio_put(bio);