]> git.openfabrics.org - ~shefty/rdma-dev.git/blobdiff - drivers/staging/android/lowmemorykiller.c
Staging: android: lowmemorykiller: cleanup android low memory killer
[~shefty/rdma-dev.git] / drivers / staging / android / lowmemorykiller.c
index b2ab7faac4fb0842b2c76214fd8ef36e6bcf5a12..f61333b96025f142672367750219e428ebbae32d 100644 (file)
@@ -57,58 +57,71 @@ static int lowmem_shrink(int nr_to_scan, gfp_t gfp_mask)
        int i;
        int min_adj = OOM_ADJUST_MAX + 1;
        int selected_tasksize = 0;
+       int selected_oom_adj;
        int array_size = ARRAY_SIZE(lowmem_adj);
        int other_free = global_page_state(NR_FREE_PAGES);
        int other_file = global_page_state(NR_FILE_PAGES);
-       if(lowmem_adj_size < array_size)
+
+       if (lowmem_adj_size < array_size)
                array_size = lowmem_adj_size;
-       if(lowmem_minfree_size < array_size)
+       if (lowmem_minfree_size < array_size)
                array_size = lowmem_minfree_size;
-       for(i = 0; i < array_size; i++) {
+       for (i = 0; i < array_size; i++) {
                if (other_free < lowmem_minfree[i] &&
                    other_file < lowmem_minfree[i]) {
                        min_adj = lowmem_adj[i];
                        break;
                }
        }
-       if(nr_to_scan > 0)
-               lowmem_print(3, "lowmem_shrink %d, %x, ofree %d %d, ma %d\n", nr_to_scan, gfp_mask, other_free, other_file, min_adj);
+       if (nr_to_scan > 0)
+               lowmem_print(3, "lowmem_shrink %d, %x, ofree %d %d, ma %d\n",
+                            nr_to_scan, gfp_mask, other_free, other_file,
+                            min_adj);
        rem = global_page_state(NR_ACTIVE_ANON) +
                global_page_state(NR_ACTIVE_FILE) +
                global_page_state(NR_INACTIVE_ANON) +
                global_page_state(NR_INACTIVE_FILE);
        if (nr_to_scan <= 0 || min_adj == OOM_ADJUST_MAX + 1) {
-               lowmem_print(5, "lowmem_shrink %d, %x, return %d\n", nr_to_scan, gfp_mask, rem);
+               lowmem_print(5, "lowmem_shrink %d, %x, return %d\n",
+                            nr_to_scan, gfp_mask, rem);
                return rem;
        }
+       selected_oom_adj = min_adj;
 
        read_lock(&tasklist_lock);
        for_each_process(p) {
-               if (p->oomkilladj < min_adj || !p->mm)
+               int oom_adj;
+
+               if (!p->mm)
+                       continue;
+               oom_adj = p->oomkilladj;
+               if (oom_adj < min_adj)
                        continue;
                tasksize = get_mm_rss(p->mm);
                if (tasksize <= 0)
                        continue;
                if (selected) {
-                       if (p->oomkilladj < selected->oomkilladj)
+                       if (oom_adj < selected_oom_adj)
                                continue;
-                       if (p->oomkilladj == selected->oomkilladj &&
+                       if (oom_adj == selected_oom_adj &&
                            tasksize <= selected_tasksize)
                                continue;
                }
                selected = p;
                selected_tasksize = tasksize;
+               selected_oom_adj = oom_adj;
                lowmem_print(2, "select %d (%s), adj %d, size %d, to kill\n",
-                            p->pid, p->comm, p->oomkilladj, tasksize);
+                            p->pid, p->comm, oom_adj, tasksize);
        }
-       if(selected != NULL) {
+       if (selected) {
                lowmem_print(1, "send sigkill to %d (%s), adj %d, size %d\n",
                             selected->pid, selected->comm,
-                            selected->oomkilladj, selected_tasksize);
+                            selected_oom_adj, selected_tasksize);
                force_sig(SIGKILL, selected);
                rem -= selected_tasksize;
        }
-       lowmem_print(4, "lowmem_shrink %d, %x, return %d\n", nr_to_scan, gfp_mask, rem);
+       lowmem_print(4, "lowmem_shrink %d, %x, return %d\n",
+                    nr_to_scan, gfp_mask, rem);
        read_unlock(&tasklist_lock);
        return rem;
 }