aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
Diffstat (limited to 'mm')
-rw-r--r--mm/mmap.c9
-rw-r--r--mm/oom_kill.c62
-rw-r--r--mm/page_alloc.c28
-rw-r--r--mm/readahead.c1
-rw-r--r--mm/shmem.c2
-rw-r--r--mm/slab.c18
-rw-r--r--mm/vmscan.c8
7 files changed, 65 insertions, 63 deletions
diff --git a/mm/mmap.c b/mm/mmap.c
index 404319477e71..12334aecf8ad 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -61,7 +61,7 @@ pgprot_t protection_map[16] = {
61 61
62int sysctl_overcommit_memory = OVERCOMMIT_GUESS; /* heuristic overcommit */ 62int sysctl_overcommit_memory = OVERCOMMIT_GUESS; /* heuristic overcommit */
63int sysctl_overcommit_ratio = 50; /* default is 50% */ 63int sysctl_overcommit_ratio = 50; /* default is 50% */
64int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT; 64int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT;
65atomic_t vm_committed_space = ATOMIC_INIT(0); 65atomic_t vm_committed_space = ATOMIC_INIT(0);
66 66
67/* 67/*
@@ -203,13 +203,6 @@ static void remove_vm_struct(struct vm_area_struct *vma)
203 kmem_cache_free(vm_area_cachep, vma); 203 kmem_cache_free(vm_area_cachep, vma);
204} 204}
205 205
206/*
207 * sys_brk() for the most part doesn't need the global kernel
208 * lock, except when an application is doing something nasty
209 * like trying to un-brk an area that has already been mapped
210 * to a regular file. in this case, the unmapping will need
211 * to invoke file system routines that need the global lock.
212 */
213asmlinkage unsigned long sys_brk(unsigned long brk) 206asmlinkage unsigned long sys_brk(unsigned long brk)
214{ 207{
215 unsigned long rlim, retval; 208 unsigned long rlim, retval;
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
index 1e56076672f5..5ec8da12cfd9 100644
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
@@ -6,8 +6,8 @@
6 * for goading me into coding this file... 6 * for goading me into coding this file...
7 * 7 *
8 * The routines in this file are used to kill a process when 8 * The routines in this file are used to kill a process when
9 * we're seriously out of memory. This gets called from kswapd() 9 * we're seriously out of memory. This gets called from __alloc_pages()
10 * in linux/mm/vmscan.c when we really run out of memory. 10 * in mm/page_alloc.c when we really run out of memory.
11 * 11 *
12 * Since we won't call these routines often (on a well-configured 12 * Since we won't call these routines often (on a well-configured
13 * machine) this file will double as a 'coding guide' and a signpost 13 * machine) this file will double as a 'coding guide' and a signpost
@@ -20,13 +20,14 @@
20#include <linux/swap.h> 20#include <linux/swap.h>
21#include <linux/timex.h> 21#include <linux/timex.h>
22#include <linux/jiffies.h> 22#include <linux/jiffies.h>
23#include <linux/cpuset.h>
23 24
24/* #define DEBUG */ 25/* #define DEBUG */
25 26
26/** 27/**
27 * oom_badness - calculate a numeric value for how bad this task has been 28 * oom_badness - calculate a numeric value for how bad this task has been
28 * @p: task struct of which task we should calculate 29 * @p: task struct of which task we should calculate
29 * @p: current uptime in seconds 30 * @uptime: current uptime in seconds
30 * 31 *
31 * The formula used is relatively simple and documented inline in the 32 * The formula used is relatively simple and documented inline in the
32 * function. The main rationale is that we want to select a good task 33 * function. The main rationale is that we want to select a good task
@@ -57,9 +58,9 @@ unsigned long badness(struct task_struct *p, unsigned long uptime)
57 58
58 /* 59 /*
59 * Processes which fork a lot of child processes are likely 60 * Processes which fork a lot of child processes are likely
60 * a good choice. We add the vmsize of the childs if they 61 * a good choice. We add the vmsize of the children if they
61 * have an own mm. This prevents forking servers to flood the 62 * have an own mm. This prevents forking servers to flood the
62 * machine with an endless amount of childs 63 * machine with an endless amount of children
63 */ 64 */
64 list_for_each(tsk, &p->children) { 65 list_for_each(tsk, &p->children) {
65 struct task_struct *chld; 66 struct task_struct *chld;
@@ -143,28 +144,36 @@ static struct task_struct * select_bad_process(void)
143 struct timespec uptime; 144 struct timespec uptime;
144 145
145 do_posix_clock_monotonic_gettime(&uptime); 146 do_posix_clock_monotonic_gettime(&uptime);
146 do_each_thread(g, p) 147 do_each_thread(g, p) {
148 unsigned long points;
149 int releasing;
150
147 /* skip the init task with pid == 1 */ 151 /* skip the init task with pid == 1 */
148 if (p->pid > 1 && p->oomkilladj != OOM_DISABLE) { 152 if (p->pid == 1)
149 unsigned long points; 153 continue;
150 154 if (p->oomkilladj == OOM_DISABLE)
151 /* 155 continue;
152 * This is in the process of releasing memory so wait it 156 /* If p's nodes don't overlap ours, it won't help to kill p. */
153 * to finish before killing some other task by mistake. 157 if (!cpuset_excl_nodes_overlap(p))
154 */ 158 continue;
155 if ((unlikely(test_tsk_thread_flag(p, TIF_MEMDIE)) || (p->flags & PF_EXITING)) && 159
156 !(p->flags & PF_DEAD)) 160 /*
157 return ERR_PTR(-1UL); 161 * This is in the process of releasing memory so for wait it
158 if (p->flags & PF_SWAPOFF) 162 * to finish before killing some other task by mistake.
159 return p; 163 */
160 164 releasing = test_tsk_thread_flag(p, TIF_MEMDIE) ||
161 points = badness(p, uptime.tv_sec); 165 p->flags & PF_EXITING;
162 if (points > maxpoints || !chosen) { 166 if (releasing && !(p->flags & PF_DEAD))
163 chosen = p; 167 return ERR_PTR(-1UL);
164 maxpoints = points; 168 if (p->flags & PF_SWAPOFF)
165 } 169 return p;
170
171 points = badness(p, uptime.tv_sec);
172 if (points > maxpoints || !chosen) {
173 chosen = p;
174 maxpoints = points;
166 } 175 }
167 while_each_thread(g, p); 176 } while_each_thread(g, p);
168 return chosen; 177 return chosen;
169} 178}
170 179
@@ -189,7 +198,8 @@ static void __oom_kill_task(task_t *p)
189 return; 198 return;
190 } 199 }
191 task_unlock(p); 200 task_unlock(p);
192 printk(KERN_ERR "Out of Memory: Killed process %d (%s).\n", p->pid, p->comm); 201 printk(KERN_ERR "Out of Memory: Killed process %d (%s).\n",
202 p->pid, p->comm);
193 203
194 /* 204 /*
195 * We give our sacrificial lamb high priority and access to 205 * We give our sacrificial lamb high priority and access to
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index b06a9636d971..3974fd81d27c 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -42,13 +42,13 @@
42 * MCD - HACK: Find somewhere to initialize this EARLY, or make this 42 * MCD - HACK: Find somewhere to initialize this EARLY, or make this
43 * initializer cleaner 43 * initializer cleaner
44 */ 44 */
45nodemask_t node_online_map = { { [0] = 1UL } }; 45nodemask_t node_online_map __read_mostly = { { [0] = 1UL } };
46EXPORT_SYMBOL(node_online_map); 46EXPORT_SYMBOL(node_online_map);
47nodemask_t node_possible_map = NODE_MASK_ALL; 47nodemask_t node_possible_map __read_mostly = NODE_MASK_ALL;
48EXPORT_SYMBOL(node_possible_map); 48EXPORT_SYMBOL(node_possible_map);
49struct pglist_data *pgdat_list; 49struct pglist_data *pgdat_list __read_mostly;
50unsigned long totalram_pages; 50unsigned long totalram_pages __read_mostly;
51unsigned long totalhigh_pages; 51unsigned long totalhigh_pages __read_mostly;
52long nr_swap_pages; 52long nr_swap_pages;
53 53
54/* 54/*
@@ -68,7 +68,7 @@ EXPORT_SYMBOL(nr_swap_pages);
68 * Used by page_zone() to look up the address of the struct zone whose 68 * Used by page_zone() to look up the address of the struct zone whose
69 * id is encoded in the upper bits of page->flags 69 * id is encoded in the upper bits of page->flags
70 */ 70 */
71struct zone *zone_table[1 << ZONETABLE_SHIFT]; 71struct zone *zone_table[1 << ZONETABLE_SHIFT] __read_mostly;
72EXPORT_SYMBOL(zone_table); 72EXPORT_SYMBOL(zone_table);
73 73
74static char *zone_names[MAX_NR_ZONES] = { "DMA", "Normal", "HighMem" }; 74static char *zone_names[MAX_NR_ZONES] = { "DMA", "Normal", "HighMem" };
@@ -806,11 +806,14 @@ __alloc_pages(unsigned int __nocast gfp_mask, unsigned int order,
806 classzone_idx = zone_idx(zones[0]); 806 classzone_idx = zone_idx(zones[0]);
807 807
808restart: 808restart:
809 /* Go through the zonelist once, looking for a zone with enough free */ 809 /*
810 * Go through the zonelist once, looking for a zone with enough free.
811 * See also cpuset_zone_allowed() comment in kernel/cpuset.c.
812 */
810 for (i = 0; (z = zones[i]) != NULL; i++) { 813 for (i = 0; (z = zones[i]) != NULL; i++) {
811 int do_reclaim = should_reclaim_zone(z, gfp_mask); 814 int do_reclaim = should_reclaim_zone(z, gfp_mask);
812 815
813 if (!cpuset_zone_allowed(z)) 816 if (!cpuset_zone_allowed(z, __GFP_HARDWALL))
814 continue; 817 continue;
815 818
816 /* 819 /*
@@ -845,6 +848,7 @@ zone_reclaim_retry:
845 * 848 *
846 * This is the last chance, in general, before the goto nopage. 849 * This is the last chance, in general, before the goto nopage.
847 * Ignore cpuset if GFP_ATOMIC (!wait) rather than fail alloc. 850 * Ignore cpuset if GFP_ATOMIC (!wait) rather than fail alloc.
851 * See also cpuset_zone_allowed() comment in kernel/cpuset.c.
848 */ 852 */
849 for (i = 0; (z = zones[i]) != NULL; i++) { 853 for (i = 0; (z = zones[i]) != NULL; i++) {
850 if (!zone_watermark_ok(z, order, z->pages_min, 854 if (!zone_watermark_ok(z, order, z->pages_min,
@@ -852,7 +856,7 @@ zone_reclaim_retry:
852 gfp_mask & __GFP_HIGH)) 856 gfp_mask & __GFP_HIGH))
853 continue; 857 continue;
854 858
855 if (wait && !cpuset_zone_allowed(z)) 859 if (wait && !cpuset_zone_allowed(z, gfp_mask))
856 continue; 860 continue;
857 861
858 page = buffered_rmqueue(z, order, gfp_mask); 862 page = buffered_rmqueue(z, order, gfp_mask);
@@ -867,7 +871,7 @@ zone_reclaim_retry:
867 if (!(gfp_mask & __GFP_NOMEMALLOC)) { 871 if (!(gfp_mask & __GFP_NOMEMALLOC)) {
868 /* go through the zonelist yet again, ignoring mins */ 872 /* go through the zonelist yet again, ignoring mins */
869 for (i = 0; (z = zones[i]) != NULL; i++) { 873 for (i = 0; (z = zones[i]) != NULL; i++) {
870 if (!cpuset_zone_allowed(z)) 874 if (!cpuset_zone_allowed(z, gfp_mask))
871 continue; 875 continue;
872 page = buffered_rmqueue(z, order, gfp_mask); 876 page = buffered_rmqueue(z, order, gfp_mask);
873 if (page) 877 if (page)
@@ -903,7 +907,7 @@ rebalance:
903 gfp_mask & __GFP_HIGH)) 907 gfp_mask & __GFP_HIGH))
904 continue; 908 continue;
905 909
906 if (!cpuset_zone_allowed(z)) 910 if (!cpuset_zone_allowed(z, gfp_mask))
907 continue; 911 continue;
908 912
909 page = buffered_rmqueue(z, order, gfp_mask); 913 page = buffered_rmqueue(z, order, gfp_mask);
@@ -922,7 +926,7 @@ rebalance:
922 classzone_idx, 0, 0)) 926 classzone_idx, 0, 0))
923 continue; 927 continue;
924 928
925 if (!cpuset_zone_allowed(z)) 929 if (!cpuset_zone_allowed(z, __GFP_HARDWALL))
926 continue; 930 continue;
927 931
928 page = buffered_rmqueue(z, order, gfp_mask); 932 page = buffered_rmqueue(z, order, gfp_mask);
diff --git a/mm/readahead.c b/mm/readahead.c
index b840e7c6ea74..d0b50034e245 100644
--- a/mm/readahead.c
+++ b/mm/readahead.c
@@ -540,6 +540,7 @@ void handle_ra_miss(struct address_space *mapping,
540{ 540{
541 ra->flags |= RA_FLAG_MISS; 541 ra->flags |= RA_FLAG_MISS;
542 ra->flags &= ~RA_FLAG_INCACHE; 542 ra->flags &= ~RA_FLAG_INCACHE;
543 ra->cache_hit = 0;
543} 544}
544 545
545/* 546/*
diff --git a/mm/shmem.c b/mm/shmem.c
index bdc4bbb6ddbb..db2c9e8d9909 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -180,7 +180,7 @@ static struct inode_operations shmem_inode_operations;
180static struct inode_operations shmem_dir_inode_operations; 180static struct inode_operations shmem_dir_inode_operations;
181static struct vm_operations_struct shmem_vm_ops; 181static struct vm_operations_struct shmem_vm_ops;
182 182
183static struct backing_dev_info shmem_backing_dev_info = { 183static struct backing_dev_info shmem_backing_dev_info __read_mostly = {
184 .ra_pages = 0, /* No readahead */ 184 .ra_pages = 0, /* No readahead */
185 .capabilities = BDI_CAP_NO_ACCT_DIRTY | BDI_CAP_NO_WRITEBACK, 185 .capabilities = BDI_CAP_NO_ACCT_DIRTY | BDI_CAP_NO_WRITEBACK,
186 .unplug_io_fn = default_unplug_io_fn, 186 .unplug_io_fn = default_unplug_io_fn,
diff --git a/mm/slab.c b/mm/slab.c
index a9ff4f7f9860..d7c4443991fe 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -2558,24 +2558,18 @@ void kmem_cache_free(kmem_cache_t *cachep, void *objp)
2558EXPORT_SYMBOL(kmem_cache_free); 2558EXPORT_SYMBOL(kmem_cache_free);
2559 2559
2560/** 2560/**
2561 * kcalloc - allocate memory for an array. The memory is set to zero. 2561 * kzalloc - allocate memory. The memory is set to zero.
2562 * @n: number of elements. 2562 * @size: how many bytes of memory are required.
2563 * @size: element size.
2564 * @flags: the type of memory to allocate. 2563 * @flags: the type of memory to allocate.
2565 */ 2564 */
2566void *kcalloc(size_t n, size_t size, unsigned int __nocast flags) 2565void *kzalloc(size_t size, unsigned int __nocast flags)
2567{ 2566{
2568 void *ret = NULL; 2567 void *ret = kmalloc(size, flags);
2569
2570 if (n != 0 && size > INT_MAX / n)
2571 return ret;
2572
2573 ret = kmalloc(n * size, flags);
2574 if (ret) 2568 if (ret)
2575 memset(ret, 0, n * size); 2569 memset(ret, 0, size);
2576 return ret; 2570 return ret;
2577} 2571}
2578EXPORT_SYMBOL(kcalloc); 2572EXPORT_SYMBOL(kzalloc);
2579 2573
2580/** 2574/**
2581 * kfree - free previously allocated memory 2575 * kfree - free previously allocated memory
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 0095533cdde9..a740778f688d 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -894,7 +894,7 @@ shrink_caches(struct zone **zones, struct scan_control *sc)
894 if (zone->present_pages == 0) 894 if (zone->present_pages == 0)
895 continue; 895 continue;
896 896
897 if (!cpuset_zone_allowed(zone)) 897 if (!cpuset_zone_allowed(zone, __GFP_HARDWALL))
898 continue; 898 continue;
899 899
900 zone->temp_priority = sc->priority; 900 zone->temp_priority = sc->priority;
@@ -940,7 +940,7 @@ int try_to_free_pages(struct zone **zones, unsigned int gfp_mask)
940 for (i = 0; zones[i] != NULL; i++) { 940 for (i = 0; zones[i] != NULL; i++) {
941 struct zone *zone = zones[i]; 941 struct zone *zone = zones[i];
942 942
943 if (!cpuset_zone_allowed(zone)) 943 if (!cpuset_zone_allowed(zone, __GFP_HARDWALL))
944 continue; 944 continue;
945 945
946 zone->temp_priority = DEF_PRIORITY; 946 zone->temp_priority = DEF_PRIORITY;
@@ -986,7 +986,7 @@ out:
986 for (i = 0; zones[i] != 0; i++) { 986 for (i = 0; zones[i] != 0; i++) {
987 struct zone *zone = zones[i]; 987 struct zone *zone = zones[i];
988 988
989 if (!cpuset_zone_allowed(zone)) 989 if (!cpuset_zone_allowed(zone, __GFP_HARDWALL))
990 continue; 990 continue;
991 991
992 zone->prev_priority = zone->temp_priority; 992 zone->prev_priority = zone->temp_priority;
@@ -1256,7 +1256,7 @@ void wakeup_kswapd(struct zone *zone, int order)
1256 return; 1256 return;
1257 if (pgdat->kswapd_max_order < order) 1257 if (pgdat->kswapd_max_order < order)
1258 pgdat->kswapd_max_order = order; 1258 pgdat->kswapd_max_order = order;
1259 if (!cpuset_zone_allowed(zone)) 1259 if (!cpuset_zone_allowed(zone, __GFP_HARDWALL))
1260 return; 1260 return;
1261 if (!waitqueue_active(&zone->zone_pgdat->kswapd_wait)) 1261 if (!waitqueue_active(&zone->zone_pgdat->kswapd_wait))
1262 return; 1262 return;