From: Christian König <christian.koenig@xxxxxxx> Try to make better decisions which process to kill based on per file OOM badness. Signed-off-by: Christian König <christian.koenig@xxxxxxx> Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx> --- drivers/staging/android/lowmemorykiller.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/staging/android/lowmemorykiller.c b/drivers/staging/android/lowmemorykiller.c index feafa17..baefe8f 100644 --- a/drivers/staging/android/lowmemorykiller.c +++ b/drivers/staging/android/lowmemorykiller.c @@ -41,6 +41,7 @@ #include <linux/rcupdate.h> #include <linux/profile.h> #include <linux/notifier.h> +#include <linux/fdtable.h> static uint32_t lowmem_debug_level = 1; static short lowmem_adj[6] = { @@ -75,6 +76,13 @@ static unsigned long lowmem_count(struct shrinker *s, global_page_state(NR_INACTIVE_FILE); } +static int lowmem_file_badness(const void *tasksize, struct file *file, unsigned n) +{ + *((int*)tasksize) += atomic_long_read(&file->f_oom_badness); + + return 0; +} + static unsigned long lowmem_scan(struct shrinker *s, struct shrink_control *sc) { struct task_struct *tsk; @@ -139,6 +147,7 @@ static unsigned long lowmem_scan(struct shrinker *s, struct shrink_control *sc) continue; } tasksize = get_mm_rss(p->mm); + iterate_fd(p->files, 0, lowmem_file_badness, &tasksize); task_unlock(p); if (tasksize <= 0) continue; -- 1.9.1 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel