summaryrefslogtreecommitdiff
path: root/mm/page_io.c
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2017-08-28 13:00:44 -0600
committerJens Axboe <axboe@kernel.dk>2017-08-28 13:00:44 -0600
commitcd996fb47c360320cf25ac9503c16de085ea9cfc (patch)
tree38a4730b2c031afe7daf632064f9687f1e09194e /mm/page_io.c
parente9a823fb34a8b0fcba6e112aa1003258a1a5af50 (diff)
parentcc4a41fe5541a73019a864883297bd5043aa6d98 (diff)
Merge tag 'v4.13-rc7' into for-4.14/block-postmerge
Linux 4.13-rc7 Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'mm/page_io.c')
-rw-r--r--mm/page_io.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/mm/page_io.c b/mm/page_io.c
index 9cf1bc751d79..868e7a96bf8a 100644
--- a/mm/page_io.c
+++ b/mm/page_io.c
@@ -22,6 +22,7 @@
#include <linux/frontswap.h>
#include <linux/blkdev.h>
#include <linux/uio.h>
+#include <linux/sched/task.h>
#include <asm/pgtable.h>
static struct bio *get_swap_bio(gfp_t gfp_flags,
@@ -137,6 +138,7 @@ out:
WRITE_ONCE(bio->bi_private, NULL);
bio_put(bio);
wake_up_process(waiter);
+ put_task_struct(waiter);
}
int generic_swapfile_activate(struct swap_info_struct *sis,
@@ -378,6 +380,11 @@ int swap_readpage(struct page *page, bool do_poll)
ret = -ENOMEM;
goto out;
}
+ /*
+ * Keep this task valid during swap readpage because the oom killer may
+ * attempt to access it in the page fault retry time check.
+ */
+ get_task_struct(current);
disk = bio->bi_disk;
bio->bi_private = current;
bio_set_op_attrs(bio, REQ_OP_READ, 0);