staging: android: lowmemorykiller: Don't wait more than one second for a process...
authorArve Hjønnevåg <arve@android.com>
Wed, 24 Nov 2010 02:20:28 +0000 (18:20 -0800)
committerRebecca Schultz Zavin <rebecca@android.com>
Tue, 21 Dec 2010 19:47:36 +0000 (11:47 -0800)
If a process forked and the child process was killed by the
lowmemorykiller, the lowmemory killer would be disabled until
the parent process reaped the child or it died itself.

Change-Id: I709b1a4e1b1a1970e51d26a39fcbee57977bbc7f
Signed-off-by: Arve Hjønnevåg <arve@android.com>
drivers/staging/android/lowmemorykiller.c

index efbe556ba862b33b3ac9da050137ed73b4cabe0b..4c455cf9176d2695bb3286de66b4a8e5de34a2aa 100644 (file)
@@ -53,6 +53,7 @@ static size_t lowmem_minfree[6] = {
 static int lowmem_minfree_size = 4;
 
 static struct task_struct *lowmem_deathpending;
+static unsigned long lowmem_deathpending_timeout;
 
 #define lowmem_print(level, x...)                      \
        do {                                            \
@@ -99,7 +100,8 @@ static int lowmem_shrink(struct shrinker *s, int nr_to_scan, gfp_t gfp_mask)
         * this pass.
         *
         */
-       if (lowmem_deathpending)
+       if (lowmem_deathpending &&
+           time_before_eq(jiffies, lowmem_deathpending_timeout))
                return 0;
 
        if (lowmem_adj_size < array_size)
@@ -168,6 +170,7 @@ static int lowmem_shrink(struct shrinker *s, int nr_to_scan, gfp_t gfp_mask)
                             selected->pid, selected->comm,
                             selected_oom_adj, selected_tasksize);
                lowmem_deathpending = selected;
+               lowmem_deathpending_timeout = jiffies + HZ;
                force_sig(SIGKILL, selected);
                rem -= selected_tasksize;
        }