|
@@ -34,6 +34,7 @@
|
|
#include <linux/mm.h>
|
|
#include <linux/mm.h>
|
|
#include <linux/oom.h>
|
|
#include <linux/oom.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/sched.h>
|
|
|
|
+#include <linux/rcupdate.h>
|
|
#include <linux/profile.h>
|
|
#include <linux/profile.h>
|
|
#include <linux/notifier.h>
|
|
#include <linux/notifier.h>
|
|
|
|
|
|
@@ -132,7 +133,7 @@ static int lowmem_shrink(struct shrinker *s, struct shrink_control *sc)
|
|
}
|
|
}
|
|
selected_oom_adj = min_adj;
|
|
selected_oom_adj = min_adj;
|
|
|
|
|
|
- read_lock(&tasklist_lock);
|
|
|
|
|
|
+ rcu_read_lock();
|
|
for_each_process(p) {
|
|
for_each_process(p) {
|
|
struct mm_struct *mm;
|
|
struct mm_struct *mm;
|
|
struct signal_struct *sig;
|
|
struct signal_struct *sig;
|
|
@@ -180,12 +181,12 @@ static int lowmem_shrink(struct shrinker *s, struct shrink_control *sc)
|
|
lowmem_deathpending = selected;
|
|
lowmem_deathpending = selected;
|
|
task_handoff_register(&task_nb);
|
|
task_handoff_register(&task_nb);
|
|
#endif
|
|
#endif
|
|
- force_sig(SIGKILL, selected);
|
|
|
|
|
|
+ send_sig(SIGKILL, selected, 0);
|
|
rem -= selected_tasksize;
|
|
rem -= selected_tasksize;
|
|
}
|
|
}
|
|
lowmem_print(4, "lowmem_shrink %lu, %x, return %d\n",
|
|
lowmem_print(4, "lowmem_shrink %lu, %x, return %d\n",
|
|
sc->nr_to_scan, sc->gfp_mask, rem);
|
|
sc->nr_to_scan, sc->gfp_mask, rem);
|
|
- read_unlock(&tasklist_lock);
|
|
|
|
|
|
+ rcu_read_unlock();
|
|
return rem;
|
|
return rem;
|
|
}
|
|
}
|
|
|
|
|