|
@@ -82,7 +82,7 @@ task_notify_func(struct notifier_block *self, unsigned long val, void *data)
|
|
|
|
|
|
static int lowmem_shrink(struct shrinker *s, struct shrink_control *sc)
|
|
static int lowmem_shrink(struct shrinker *s, struct shrink_control *sc)
|
|
{
|
|
{
|
|
- struct task_struct *p;
|
|
|
|
|
|
+ struct task_struct *tsk;
|
|
struct task_struct *selected = NULL;
|
|
struct task_struct *selected = NULL;
|
|
int rem = 0;
|
|
int rem = 0;
|
|
int tasksize;
|
|
int tasksize;
|
|
@@ -134,15 +134,17 @@ static int lowmem_shrink(struct shrinker *s, struct shrink_control *sc)
|
|
selected_oom_adj = min_adj;
|
|
selected_oom_adj = min_adj;
|
|
|
|
|
|
rcu_read_lock();
|
|
rcu_read_lock();
|
|
- for_each_process(p) {
|
|
|
|
- struct mm_struct *mm;
|
|
|
|
|
|
+ for_each_process(tsk) {
|
|
|
|
+ struct task_struct *p;
|
|
struct signal_struct *sig;
|
|
struct signal_struct *sig;
|
|
int oom_adj;
|
|
int oom_adj;
|
|
|
|
|
|
- task_lock(p);
|
|
|
|
- mm = p->mm;
|
|
|
|
|
|
+ p = find_lock_task_mm(tsk);
|
|
|
|
+ if (!p)
|
|
|
|
+ continue;
|
|
|
|
+
|
|
sig = p->signal;
|
|
sig = p->signal;
|
|
- if (!mm || !sig) {
|
|
|
|
|
|
+ if (!sig) {
|
|
task_unlock(p);
|
|
task_unlock(p);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
@@ -151,7 +153,7 @@ static int lowmem_shrink(struct shrinker *s, struct shrink_control *sc)
|
|
task_unlock(p);
|
|
task_unlock(p);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- tasksize = get_mm_rss(mm);
|
|
|
|
|
|
+ tasksize = get_mm_rss(p->mm);
|
|
task_unlock(p);
|
|
task_unlock(p);
|
|
if (tasksize <= 0)
|
|
if (tasksize <= 0)
|
|
continue;
|
|
continue;
|