diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/hugetlb.c | 2 | ||||
-rw-r--r-- | mm/memblock.c | 7 | ||||
-rw-r--r-- | mm/memcontrol.c | 16 | ||||
-rw-r--r-- | mm/mempolicy.c | 11 | ||||
-rw-r--r-- | mm/migrate.c | 16 | ||||
-rw-r--r-- | mm/mmap.c | 59 | ||||
-rw-r--r-- | mm/nobootmem.c | 10 | ||||
-rw-r--r-- | mm/nommu.c | 41 | ||||
-rw-r--r-- | mm/percpu.c | 10 | ||||
-rw-r--r-- | mm/swap_state.c | 2 | ||||
-rw-r--r-- | mm/vmscan.c | 11 | ||||
-rw-r--r-- | mm/vmstat.c | 4 |
12 files changed, 137 insertions, 52 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index cd65cb19c941..5a16423a512c 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -532,7 +532,7 @@ static struct page *dequeue_huge_page_vma(struct hstate *h, | |||
532 | struct vm_area_struct *vma, | 532 | struct vm_area_struct *vma, |
533 | unsigned long address, int avoid_reserve) | 533 | unsigned long address, int avoid_reserve) |
534 | { | 534 | { |
535 | struct page *page; | 535 | struct page *page = NULL; |
536 | struct mempolicy *mpol; | 536 | struct mempolicy *mpol; |
537 | nodemask_t *nodemask; | 537 | nodemask_t *nodemask; |
538 | struct zonelist *zonelist; | 538 | struct zonelist *zonelist; |
diff --git a/mm/memblock.c b/mm/memblock.c index 99f285599501..a44eab3157f8 100644 --- a/mm/memblock.c +++ b/mm/memblock.c | |||
@@ -330,6 +330,9 @@ static int __init_memblock memblock_add_region(struct memblock_type *type, | |||
330 | phys_addr_t end = base + memblock_cap_size(base, &size); | 330 | phys_addr_t end = base + memblock_cap_size(base, &size); |
331 | int i, nr_new; | 331 | int i, nr_new; |
332 | 332 | ||
333 | if (!size) | ||
334 | return 0; | ||
335 | |||
333 | /* special case for empty array */ | 336 | /* special case for empty array */ |
334 | if (type->regions[0].size == 0) { | 337 | if (type->regions[0].size == 0) { |
335 | WARN_ON(type->cnt != 1 || type->total_size); | 338 | WARN_ON(type->cnt != 1 || type->total_size); |
@@ -430,6 +433,9 @@ static int __init_memblock memblock_isolate_range(struct memblock_type *type, | |||
430 | 433 | ||
431 | *start_rgn = *end_rgn = 0; | 434 | *start_rgn = *end_rgn = 0; |
432 | 435 | ||
436 | if (!size) | ||
437 | return 0; | ||
438 | |||
433 | /* we'll create at most two more regions */ | 439 | /* we'll create at most two more regions */ |
434 | while (type->cnt + 2 > type->max) | 440 | while (type->cnt + 2 > type->max) |
435 | if (memblock_double_array(type) < 0) | 441 | if (memblock_double_array(type) < 0) |
@@ -514,7 +520,6 @@ int __init_memblock memblock_reserve(phys_addr_t base, phys_addr_t size) | |||
514 | (unsigned long long)base, | 520 | (unsigned long long)base, |
515 | (unsigned long long)base + size, | 521 | (unsigned long long)base + size, |
516 | (void *)_RET_IP_); | 522 | (void *)_RET_IP_); |
517 | BUG_ON(0 == size); | ||
518 | 523 | ||
519 | return memblock_add_region(_rgn, base, size, MAX_NUMNODES); | 524 | return memblock_add_region(_rgn, base, size, MAX_NUMNODES); |
520 | } | 525 | } |
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index a7165a60d0a7..31ab9c3f0178 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -2476,10 +2476,10 @@ struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page) | |||
2476 | static void __mem_cgroup_commit_charge(struct mem_cgroup *memcg, | 2476 | static void __mem_cgroup_commit_charge(struct mem_cgroup *memcg, |
2477 | struct page *page, | 2477 | struct page *page, |
2478 | unsigned int nr_pages, | 2478 | unsigned int nr_pages, |
2479 | struct page_cgroup *pc, | ||
2480 | enum charge_type ctype, | 2479 | enum charge_type ctype, |
2481 | bool lrucare) | 2480 | bool lrucare) |
2482 | { | 2481 | { |
2482 | struct page_cgroup *pc = lookup_page_cgroup(page); | ||
2483 | struct zone *uninitialized_var(zone); | 2483 | struct zone *uninitialized_var(zone); |
2484 | bool was_on_lru = false; | 2484 | bool was_on_lru = false; |
2485 | bool anon; | 2485 | bool anon; |
@@ -2716,7 +2716,6 @@ static int mem_cgroup_charge_common(struct page *page, struct mm_struct *mm, | |||
2716 | { | 2716 | { |
2717 | struct mem_cgroup *memcg = NULL; | 2717 | struct mem_cgroup *memcg = NULL; |
2718 | unsigned int nr_pages = 1; | 2718 | unsigned int nr_pages = 1; |
2719 | struct page_cgroup *pc; | ||
2720 | bool oom = true; | 2719 | bool oom = true; |
2721 | int ret; | 2720 | int ret; |
2722 | 2721 | ||
@@ -2730,11 +2729,10 @@ static int mem_cgroup_charge_common(struct page *page, struct mm_struct *mm, | |||
2730 | oom = false; | 2729 | oom = false; |
2731 | } | 2730 | } |
2732 | 2731 | ||
2733 | pc = lookup_page_cgroup(page); | ||
2734 | ret = __mem_cgroup_try_charge(mm, gfp_mask, nr_pages, &memcg, oom); | 2732 | ret = __mem_cgroup_try_charge(mm, gfp_mask, nr_pages, &memcg, oom); |
2735 | if (ret == -ENOMEM) | 2733 | if (ret == -ENOMEM) |
2736 | return ret; | 2734 | return ret; |
2737 | __mem_cgroup_commit_charge(memcg, page, nr_pages, pc, ctype, false); | 2735 | __mem_cgroup_commit_charge(memcg, page, nr_pages, ctype, false); |
2738 | return 0; | 2736 | return 0; |
2739 | } | 2737 | } |
2740 | 2738 | ||
@@ -2831,16 +2829,13 @@ static void | |||
2831 | __mem_cgroup_commit_charge_swapin(struct page *page, struct mem_cgroup *memcg, | 2829 | __mem_cgroup_commit_charge_swapin(struct page *page, struct mem_cgroup *memcg, |
2832 | enum charge_type ctype) | 2830 | enum charge_type ctype) |
2833 | { | 2831 | { |
2834 | struct page_cgroup *pc; | ||
2835 | |||
2836 | if (mem_cgroup_disabled()) | 2832 | if (mem_cgroup_disabled()) |
2837 | return; | 2833 | return; |
2838 | if (!memcg) | 2834 | if (!memcg) |
2839 | return; | 2835 | return; |
2840 | cgroup_exclude_rmdir(&memcg->css); | 2836 | cgroup_exclude_rmdir(&memcg->css); |
2841 | 2837 | ||
2842 | pc = lookup_page_cgroup(page); | 2838 | __mem_cgroup_commit_charge(memcg, page, 1, ctype, true); |
2843 | __mem_cgroup_commit_charge(memcg, page, 1, pc, ctype, true); | ||
2844 | /* | 2839 | /* |
2845 | * Now swap is on-memory. This means this page may be | 2840 | * Now swap is on-memory. This means this page may be |
2846 | * counted both as mem and swap....double count. | 2841 | * counted both as mem and swap....double count. |
@@ -3298,14 +3293,13 @@ int mem_cgroup_prepare_migration(struct page *page, | |||
3298 | * page. In the case new page is migrated but not remapped, new page's | 3293 | * page. In the case new page is migrated but not remapped, new page's |
3299 | * mapcount will be finally 0 and we call uncharge in end_migration(). | 3294 | * mapcount will be finally 0 and we call uncharge in end_migration(). |
3300 | */ | 3295 | */ |
3301 | pc = lookup_page_cgroup(newpage); | ||
3302 | if (PageAnon(page)) | 3296 | if (PageAnon(page)) |
3303 | ctype = MEM_CGROUP_CHARGE_TYPE_MAPPED; | 3297 | ctype = MEM_CGROUP_CHARGE_TYPE_MAPPED; |
3304 | else if (page_is_file_cache(page)) | 3298 | else if (page_is_file_cache(page)) |
3305 | ctype = MEM_CGROUP_CHARGE_TYPE_CACHE; | 3299 | ctype = MEM_CGROUP_CHARGE_TYPE_CACHE; |
3306 | else | 3300 | else |
3307 | ctype = MEM_CGROUP_CHARGE_TYPE_SHMEM; | 3301 | ctype = MEM_CGROUP_CHARGE_TYPE_SHMEM; |
3308 | __mem_cgroup_commit_charge(memcg, newpage, 1, pc, ctype, false); | 3302 | __mem_cgroup_commit_charge(memcg, newpage, 1, ctype, false); |
3309 | return ret; | 3303 | return ret; |
3310 | } | 3304 | } |
3311 | 3305 | ||
@@ -3392,7 +3386,7 @@ void mem_cgroup_replace_page_cache(struct page *oldpage, | |||
3392 | * the newpage may be on LRU(or pagevec for LRU) already. We lock | 3386 | * the newpage may be on LRU(or pagevec for LRU) already. We lock |
3393 | * LRU while we overwrite pc->mem_cgroup. | 3387 | * LRU while we overwrite pc->mem_cgroup. |
3394 | */ | 3388 | */ |
3395 | __mem_cgroup_commit_charge(memcg, newpage, 1, pc, type, true); | 3389 | __mem_cgroup_commit_charge(memcg, newpage, 1, type, true); |
3396 | } | 3390 | } |
3397 | 3391 | ||
3398 | #ifdef CONFIG_DEBUG_VM | 3392 | #ifdef CONFIG_DEBUG_VM |
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index cfb6c8678754..b19569137529 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c | |||
@@ -1361,11 +1361,14 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, | |||
1361 | 1361 | ||
1362 | mm = get_task_mm(task); | 1362 | mm = get_task_mm(task); |
1363 | put_task_struct(task); | 1363 | put_task_struct(task); |
1364 | if (mm) | 1364 | |
1365 | err = do_migrate_pages(mm, old, new, | 1365 | if (!mm) { |
1366 | capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE); | ||
1367 | else | ||
1368 | err = -EINVAL; | 1366 | err = -EINVAL; |
1367 | goto out; | ||
1368 | } | ||
1369 | |||
1370 | err = do_migrate_pages(mm, old, new, | ||
1371 | capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE); | ||
1369 | 1372 | ||
1370 | mmput(mm); | 1373 | mmput(mm); |
1371 | out: | 1374 | out: |
diff --git a/mm/migrate.c b/mm/migrate.c index 51c08a0c6f68..11072383ae12 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -1388,14 +1388,14 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages, | |||
1388 | mm = get_task_mm(task); | 1388 | mm = get_task_mm(task); |
1389 | put_task_struct(task); | 1389 | put_task_struct(task); |
1390 | 1390 | ||
1391 | if (mm) { | 1391 | if (!mm) |
1392 | if (nodes) | 1392 | return -EINVAL; |
1393 | err = do_pages_move(mm, task_nodes, nr_pages, pages, | 1393 | |
1394 | nodes, status, flags); | 1394 | if (nodes) |
1395 | else | 1395 | err = do_pages_move(mm, task_nodes, nr_pages, pages, |
1396 | err = do_pages_stat(mm, nr_pages, pages, status); | 1396 | nodes, status, flags); |
1397 | } else | 1397 | else |
1398 | err = -EINVAL; | 1398 | err = do_pages_stat(mm, nr_pages, pages, status); |
1399 | 1399 | ||
1400 | mmput(mm); | 1400 | mmput(mm); |
1401 | return err; | 1401 | return err; |
@@ -240,6 +240,8 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) | |||
240 | return next; | 240 | return next; |
241 | } | 241 | } |
242 | 242 | ||
243 | static unsigned long do_brk(unsigned long addr, unsigned long len); | ||
244 | |||
243 | SYSCALL_DEFINE1(brk, unsigned long, brk) | 245 | SYSCALL_DEFINE1(brk, unsigned long, brk) |
244 | { | 246 | { |
245 | unsigned long rlim, retval; | 247 | unsigned long rlim, retval; |
@@ -951,7 +953,7 @@ static inline unsigned long round_hint_to_min(unsigned long hint) | |||
951 | * The caller must hold down_write(¤t->mm->mmap_sem). | 953 | * The caller must hold down_write(¤t->mm->mmap_sem). |
952 | */ | 954 | */ |
953 | 955 | ||
954 | unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, | 956 | static unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
955 | unsigned long len, unsigned long prot, | 957 | unsigned long len, unsigned long prot, |
956 | unsigned long flags, unsigned long pgoff) | 958 | unsigned long flags, unsigned long pgoff) |
957 | { | 959 | { |
@@ -1087,7 +1089,32 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, | |||
1087 | 1089 | ||
1088 | return mmap_region(file, addr, len, flags, vm_flags, pgoff); | 1090 | return mmap_region(file, addr, len, flags, vm_flags, pgoff); |
1089 | } | 1091 | } |
1090 | EXPORT_SYMBOL(do_mmap_pgoff); | 1092 | |
1093 | unsigned long do_mmap(struct file *file, unsigned long addr, | ||
1094 | unsigned long len, unsigned long prot, | ||
1095 | unsigned long flag, unsigned long offset) | ||
1096 | { | ||
1097 | if (unlikely(offset + PAGE_ALIGN(len) < offset)) | ||
1098 | return -EINVAL; | ||
1099 | if (unlikely(offset & ~PAGE_MASK)) | ||
1100 | return -EINVAL; | ||
1101 | return do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT); | ||
1102 | } | ||
1103 | EXPORT_SYMBOL(do_mmap); | ||
1104 | |||
1105 | unsigned long vm_mmap(struct file *file, unsigned long addr, | ||
1106 | unsigned long len, unsigned long prot, | ||
1107 | unsigned long flag, unsigned long offset) | ||
1108 | { | ||
1109 | unsigned long ret; | ||
1110 | struct mm_struct *mm = current->mm; | ||
1111 | |||
1112 | down_write(&mm->mmap_sem); | ||
1113 | ret = do_mmap(file, addr, len, prot, flag, offset); | ||
1114 | up_write(&mm->mmap_sem); | ||
1115 | return ret; | ||
1116 | } | ||
1117 | EXPORT_SYMBOL(vm_mmap); | ||
1091 | 1118 | ||
1092 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, | 1119 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, |
1093 | unsigned long, prot, unsigned long, flags, | 1120 | unsigned long, prot, unsigned long, flags, |
@@ -2105,21 +2132,25 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) | |||
2105 | 2132 | ||
2106 | return 0; | 2133 | return 0; |
2107 | } | 2134 | } |
2108 | |||
2109 | EXPORT_SYMBOL(do_munmap); | 2135 | EXPORT_SYMBOL(do_munmap); |
2110 | 2136 | ||
2111 | SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) | 2137 | int vm_munmap(unsigned long start, size_t len) |
2112 | { | 2138 | { |
2113 | int ret; | 2139 | int ret; |
2114 | struct mm_struct *mm = current->mm; | 2140 | struct mm_struct *mm = current->mm; |
2115 | 2141 | ||
2116 | profile_munmap(addr); | ||
2117 | |||
2118 | down_write(&mm->mmap_sem); | 2142 | down_write(&mm->mmap_sem); |
2119 | ret = do_munmap(mm, addr, len); | 2143 | ret = do_munmap(mm, start, len); |
2120 | up_write(&mm->mmap_sem); | 2144 | up_write(&mm->mmap_sem); |
2121 | return ret; | 2145 | return ret; |
2122 | } | 2146 | } |
2147 | EXPORT_SYMBOL(vm_munmap); | ||
2148 | |||
2149 | SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) | ||
2150 | { | ||
2151 | profile_munmap(addr); | ||
2152 | return vm_munmap(addr, len); | ||
2153 | } | ||
2123 | 2154 | ||
2124 | static inline void verify_mm_writelocked(struct mm_struct *mm) | 2155 | static inline void verify_mm_writelocked(struct mm_struct *mm) |
2125 | { | 2156 | { |
@@ -2136,7 +2167,7 @@ static inline void verify_mm_writelocked(struct mm_struct *mm) | |||
2136 | * anonymous maps. eventually we may be able to do some | 2167 | * anonymous maps. eventually we may be able to do some |
2137 | * brk-specific accounting here. | 2168 | * brk-specific accounting here. |
2138 | */ | 2169 | */ |
2139 | unsigned long do_brk(unsigned long addr, unsigned long len) | 2170 | static unsigned long do_brk(unsigned long addr, unsigned long len) |
2140 | { | 2171 | { |
2141 | struct mm_struct * mm = current->mm; | 2172 | struct mm_struct * mm = current->mm; |
2142 | struct vm_area_struct * vma, * prev; | 2173 | struct vm_area_struct * vma, * prev; |
@@ -2232,7 +2263,17 @@ out: | |||
2232 | return addr; | 2263 | return addr; |
2233 | } | 2264 | } |
2234 | 2265 | ||
2235 | EXPORT_SYMBOL(do_brk); | 2266 | unsigned long vm_brk(unsigned long addr, unsigned long len) |
2267 | { | ||
2268 | struct mm_struct *mm = current->mm; | ||
2269 | unsigned long ret; | ||
2270 | |||
2271 | down_write(&mm->mmap_sem); | ||
2272 | ret = do_brk(addr, len); | ||
2273 | up_write(&mm->mmap_sem); | ||
2274 | return ret; | ||
2275 | } | ||
2276 | EXPORT_SYMBOL(vm_brk); | ||
2236 | 2277 | ||
2237 | /* Release all mmaps. */ | 2278 | /* Release all mmaps. */ |
2238 | void exit_mmap(struct mm_struct *mm) | 2279 | void exit_mmap(struct mm_struct *mm) |
diff --git a/mm/nobootmem.c b/mm/nobootmem.c index 24f0fc1a56d6..e53bb8a256b1 100644 --- a/mm/nobootmem.c +++ b/mm/nobootmem.c | |||
@@ -298,13 +298,19 @@ void * __init __alloc_bootmem_node(pg_data_t *pgdat, unsigned long size, | |||
298 | if (WARN_ON_ONCE(slab_is_available())) | 298 | if (WARN_ON_ONCE(slab_is_available())) |
299 | return kzalloc_node(size, GFP_NOWAIT, pgdat->node_id); | 299 | return kzalloc_node(size, GFP_NOWAIT, pgdat->node_id); |
300 | 300 | ||
301 | again: | ||
301 | ptr = __alloc_memory_core_early(pgdat->node_id, size, align, | 302 | ptr = __alloc_memory_core_early(pgdat->node_id, size, align, |
302 | goal, -1ULL); | 303 | goal, -1ULL); |
303 | if (ptr) | 304 | if (ptr) |
304 | return ptr; | 305 | return ptr; |
305 | 306 | ||
306 | return __alloc_memory_core_early(MAX_NUMNODES, size, align, | 307 | ptr = __alloc_memory_core_early(MAX_NUMNODES, size, align, |
307 | goal, -1ULL); | 308 | goal, -1ULL); |
309 | if (!ptr && goal) { | ||
310 | goal = 0; | ||
311 | goto again; | ||
312 | } | ||
313 | return ptr; | ||
308 | } | 314 | } |
309 | 315 | ||
310 | void * __init __alloc_bootmem_node_high(pg_data_t *pgdat, unsigned long size, | 316 | void * __init __alloc_bootmem_node_high(pg_data_t *pgdat, unsigned long size, |
diff --git a/mm/nommu.c b/mm/nommu.c index f59e170fceb4..bb8f4f004a82 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
@@ -1233,7 +1233,7 @@ enomem: | |||
1233 | /* | 1233 | /* |
1234 | * handle mapping creation for uClinux | 1234 | * handle mapping creation for uClinux |
1235 | */ | 1235 | */ |
1236 | unsigned long do_mmap_pgoff(struct file *file, | 1236 | static unsigned long do_mmap_pgoff(struct file *file, |
1237 | unsigned long addr, | 1237 | unsigned long addr, |
1238 | unsigned long len, | 1238 | unsigned long len, |
1239 | unsigned long prot, | 1239 | unsigned long prot, |
@@ -1470,7 +1470,32 @@ error_getting_region: | |||
1470 | show_free_areas(0); | 1470 | show_free_areas(0); |
1471 | return -ENOMEM; | 1471 | return -ENOMEM; |
1472 | } | 1472 | } |
1473 | EXPORT_SYMBOL(do_mmap_pgoff); | 1473 | |
1474 | unsigned long do_mmap(struct file *file, unsigned long addr, | ||
1475 | unsigned long len, unsigned long prot, | ||
1476 | unsigned long flag, unsigned long offset) | ||
1477 | { | ||
1478 | if (unlikely(offset + PAGE_ALIGN(len) < offset)) | ||
1479 | return -EINVAL; | ||
1480 | if (unlikely(offset & ~PAGE_MASK)) | ||
1481 | return -EINVAL; | ||
1482 | return do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT); | ||
1483 | } | ||
1484 | EXPORT_SYMBOL(do_mmap); | ||
1485 | |||
1486 | unsigned long vm_mmap(struct file *file, unsigned long addr, | ||
1487 | unsigned long len, unsigned long prot, | ||
1488 | unsigned long flag, unsigned long offset) | ||
1489 | { | ||
1490 | unsigned long ret; | ||
1491 | struct mm_struct *mm = current->mm; | ||
1492 | |||
1493 | down_write(&mm->mmap_sem); | ||
1494 | ret = do_mmap(file, addr, len, prot, flag, offset); | ||
1495 | up_write(&mm->mmap_sem); | ||
1496 | return ret; | ||
1497 | } | ||
1498 | EXPORT_SYMBOL(vm_mmap); | ||
1474 | 1499 | ||
1475 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, | 1500 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, |
1476 | unsigned long, prot, unsigned long, flags, | 1501 | unsigned long, prot, unsigned long, flags, |
@@ -1709,16 +1734,22 @@ erase_whole_vma: | |||
1709 | } | 1734 | } |
1710 | EXPORT_SYMBOL(do_munmap); | 1735 | EXPORT_SYMBOL(do_munmap); |
1711 | 1736 | ||
1712 | SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) | 1737 | int vm_munmap(unsigned long addr, size_t len) |
1713 | { | 1738 | { |
1714 | int ret; | ||
1715 | struct mm_struct *mm = current->mm; | 1739 | struct mm_struct *mm = current->mm; |
1740 | int ret; | ||
1716 | 1741 | ||
1717 | down_write(&mm->mmap_sem); | 1742 | down_write(&mm->mmap_sem); |
1718 | ret = do_munmap(mm, addr, len); | 1743 | ret = do_munmap(mm, addr, len); |
1719 | up_write(&mm->mmap_sem); | 1744 | up_write(&mm->mmap_sem); |
1720 | return ret; | 1745 | return ret; |
1721 | } | 1746 | } |
1747 | EXPORT_SYMBOL(vm_munmap); | ||
1748 | |||
1749 | SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) | ||
1750 | { | ||
1751 | return vm_munmap(addr, len); | ||
1752 | } | ||
1722 | 1753 | ||
1723 | /* | 1754 | /* |
1724 | * release all the mappings made in a process's VM space | 1755 | * release all the mappings made in a process's VM space |
@@ -1744,7 +1775,7 @@ void exit_mmap(struct mm_struct *mm) | |||
1744 | kleave(""); | 1775 | kleave(""); |
1745 | } | 1776 | } |
1746 | 1777 | ||
1747 | unsigned long do_brk(unsigned long addr, unsigned long len) | 1778 | unsigned long vm_brk(unsigned long addr, unsigned long len) |
1748 | { | 1779 | { |
1749 | return -ENOMEM; | 1780 | return -ENOMEM; |
1750 | } | 1781 | } |
diff --git a/mm/percpu.c b/mm/percpu.c index f47af9123af7..f921fdfb5430 100644 --- a/mm/percpu.c +++ b/mm/percpu.c | |||
@@ -1132,20 +1132,20 @@ static void pcpu_dump_alloc_info(const char *lvl, | |||
1132 | for (alloc_end += gi->nr_units / upa; | 1132 | for (alloc_end += gi->nr_units / upa; |
1133 | alloc < alloc_end; alloc++) { | 1133 | alloc < alloc_end; alloc++) { |
1134 | if (!(alloc % apl)) { | 1134 | if (!(alloc % apl)) { |
1135 | printk("\n"); | 1135 | printk(KERN_CONT "\n"); |
1136 | printk("%spcpu-alloc: ", lvl); | 1136 | printk("%spcpu-alloc: ", lvl); |
1137 | } | 1137 | } |
1138 | printk("[%0*d] ", group_width, group); | 1138 | printk(KERN_CONT "[%0*d] ", group_width, group); |
1139 | 1139 | ||
1140 | for (unit_end += upa; unit < unit_end; unit++) | 1140 | for (unit_end += upa; unit < unit_end; unit++) |
1141 | if (gi->cpu_map[unit] != NR_CPUS) | 1141 | if (gi->cpu_map[unit] != NR_CPUS) |
1142 | printk("%0*d ", cpu_width, | 1142 | printk(KERN_CONT "%0*d ", cpu_width, |
1143 | gi->cpu_map[unit]); | 1143 | gi->cpu_map[unit]); |
1144 | else | 1144 | else |
1145 | printk("%s ", empty_str); | 1145 | printk(KERN_CONT "%s ", empty_str); |
1146 | } | 1146 | } |
1147 | } | 1147 | } |
1148 | printk("\n"); | 1148 | printk(KERN_CONT "\n"); |
1149 | } | 1149 | } |
1150 | 1150 | ||
1151 | /** | 1151 | /** |
diff --git a/mm/swap_state.c b/mm/swap_state.c index 9d3dd3763cf7..4c5ff7f284d9 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c | |||
@@ -26,7 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | static const struct address_space_operations swap_aops = { | 27 | static const struct address_space_operations swap_aops = { |
28 | .writepage = swap_writepage, | 28 | .writepage = swap_writepage, |
29 | .set_page_dirty = __set_page_dirty_nobuffers, | 29 | .set_page_dirty = __set_page_dirty_no_writeback, |
30 | .migratepage = migrate_page, | 30 | .migratepage = migrate_page, |
31 | }; | 31 | }; |
32 | 32 | ||
diff --git a/mm/vmscan.c b/mm/vmscan.c index 1a518684a32f..33dc256033b5 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -1568,9 +1568,14 @@ shrink_inactive_list(unsigned long nr_to_scan, struct mem_cgroup_zone *mz, | |||
1568 | reclaim_stat->recent_scanned[0] += nr_anon; | 1568 | reclaim_stat->recent_scanned[0] += nr_anon; |
1569 | reclaim_stat->recent_scanned[1] += nr_file; | 1569 | reclaim_stat->recent_scanned[1] += nr_file; |
1570 | 1570 | ||
1571 | if (current_is_kswapd()) | 1571 | if (global_reclaim(sc)) { |
1572 | __count_vm_events(KSWAPD_STEAL, nr_reclaimed); | 1572 | if (current_is_kswapd()) |
1573 | __count_zone_vm_events(PGSTEAL, zone, nr_reclaimed); | 1573 | __count_zone_vm_events(PGSTEAL_KSWAPD, zone, |
1574 | nr_reclaimed); | ||
1575 | else | ||
1576 | __count_zone_vm_events(PGSTEAL_DIRECT, zone, | ||
1577 | nr_reclaimed); | ||
1578 | } | ||
1574 | 1579 | ||
1575 | putback_inactive_pages(mz, &page_list); | 1580 | putback_inactive_pages(mz, &page_list); |
1576 | 1581 | ||
diff --git a/mm/vmstat.c b/mm/vmstat.c index f600557a7659..7db1b9bab492 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c | |||
@@ -738,7 +738,8 @@ const char * const vmstat_text[] = { | |||
738 | "pgmajfault", | 738 | "pgmajfault", |
739 | 739 | ||
740 | TEXTS_FOR_ZONES("pgrefill") | 740 | TEXTS_FOR_ZONES("pgrefill") |
741 | TEXTS_FOR_ZONES("pgsteal") | 741 | TEXTS_FOR_ZONES("pgsteal_kswapd") |
742 | TEXTS_FOR_ZONES("pgsteal_direct") | ||
742 | TEXTS_FOR_ZONES("pgscan_kswapd") | 743 | TEXTS_FOR_ZONES("pgscan_kswapd") |
743 | TEXTS_FOR_ZONES("pgscan_direct") | 744 | TEXTS_FOR_ZONES("pgscan_direct") |
744 | 745 | ||
@@ -747,7 +748,6 @@ const char * const vmstat_text[] = { | |||
747 | #endif | 748 | #endif |
748 | "pginodesteal", | 749 | "pginodesteal", |
749 | "slabs_scanned", | 750 | "slabs_scanned", |
750 | "kswapd_steal", | ||
751 | "kswapd_inodesteal", | 751 | "kswapd_inodesteal", |
752 | "kswapd_low_wmark_hit_quickly", | 752 | "kswapd_low_wmark_hit_quickly", |
753 | "kswapd_high_wmark_hit_quickly", | 753 | "kswapd_high_wmark_hit_quickly", |