oom: make oom_reaper_list single linked
Entries are only added/removed from oom_reaper_list at head so we can use a single linked list and hence save a word in task_struct. Signed-off-by: Vladimir Davydov <vdavydov@virtuozzo.com> Signed-off-by: Michal Hocko <mhocko@suse.com> Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> Cc: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
855b018325
commit
29c696e1c6
|
@ -1852,7 +1852,7 @@ struct task_struct {
|
|||
#endif
|
||||
int pagefault_disabled;
|
||||
#ifdef CONFIG_MMU
|
||||
struct list_head oom_reaper_list;
|
||||
struct task_struct *oom_reaper_list;
|
||||
#endif
|
||||
/* CPU-specific state of this task */
|
||||
struct thread_struct thread;
|
||||
|
|
|
@ -419,7 +419,7 @@ bool oom_killer_disabled __read_mostly;
|
|||
*/
|
||||
static struct task_struct *oom_reaper_th;
|
||||
static DECLARE_WAIT_QUEUE_HEAD(oom_reaper_wait);
|
||||
static LIST_HEAD(oom_reaper_list);
|
||||
static struct task_struct *oom_reaper_list;
|
||||
static DEFINE_SPINLOCK(oom_reaper_lock);
|
||||
|
||||
|
||||
|
@ -528,13 +528,11 @@ static int oom_reaper(void *unused)
|
|||
while (true) {
|
||||
struct task_struct *tsk = NULL;
|
||||
|
||||
wait_event_freezable(oom_reaper_wait,
|
||||
(!list_empty(&oom_reaper_list)));
|
||||
wait_event_freezable(oom_reaper_wait, oom_reaper_list != NULL);
|
||||
spin_lock(&oom_reaper_lock);
|
||||
if (!list_empty(&oom_reaper_list)) {
|
||||
tsk = list_first_entry(&oom_reaper_list,
|
||||
struct task_struct, oom_reaper_list);
|
||||
list_del(&tsk->oom_reaper_list);
|
||||
if (oom_reaper_list != NULL) {
|
||||
tsk = oom_reaper_list;
|
||||
oom_reaper_list = tsk->oom_reaper_list;
|
||||
}
|
||||
spin_unlock(&oom_reaper_lock);
|
||||
|
||||
|
@ -553,7 +551,8 @@ static void wake_oom_reaper(struct task_struct *tsk)
|
|||
get_task_struct(tsk);
|
||||
|
||||
spin_lock(&oom_reaper_lock);
|
||||
list_add(&tsk->oom_reaper_list, &oom_reaper_list);
|
||||
tsk->oom_reaper_list = oom_reaper_list;
|
||||
oom_reaper_list = tsk;
|
||||
spin_unlock(&oom_reaper_lock);
|
||||
wake_up(&oom_reaper_wait);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue