diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 09cd8c8535fd15eafcc0e7df91b2a05e9383f53e..c9ffc793e42bf8e468d0073e551545ad23164437 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4159,12 +4159,18 @@ static int mem_cgroup_task_swapin(struct task_struct *task, void *arg) struct vm_area_struct *vma; struct blk_plug plug; + if (__task_is_dying(task)) + return 0; + if (!mm || !mmget_not_zero(mm)) + return 0; + mmap_read_lock(mm); blk_start_plug(&plug); for (vma = mm->mmap; vma; vma = vma->vm_next) force_swapin_vma(vma); blk_finish_plug(&plug); mmap_read_unlock(mm); + mmput(mm); return 0; } diff --git a/mm/swap_slots.c b/mm/swap_slots.c index b7958ca276c25e2c49ea1f55879b3215730f32a8..930f4835825486f5aa88c2dcd298958903fc4071 100644 --- a/mm/swap_slots.c +++ b/mm/swap_slots.c @@ -122,7 +122,7 @@ static inline struct swap_slots_cache *get_slots_cache(int swap_type) if (swap_type == SWAP_TYPE_ALL) return raw_cpu_ptr(&swp_slots); else - return raw_cpu_ptr(&swp_type_slots)[swap_type]; + return raw_cpu_ptr(&swp_type_slots[swap_type]); } static inline struct swap_slots_cache *get_slots_cache_cpu(unsigned int cpu,