diff options
author | David Howells <dhowells@redhat.com> | 2009-04-02 19:56:32 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-02 22:04:48 -0400 |
commit | 33e5d76979cf01e3834814fe0aea569d1d602c1a (patch) | |
tree | 58a03e5da59db203245da10db144a4f6f61a83ba /fs | |
parent | 5482415a5ecc0cd791a5d885cc3db8281401078f (diff) |
nommu: fix a number of issues with the per-MM VMA patch
Fix a number of issues with the per-MM VMA patch:
(1) Make mmap_pages_allocated an atomic_long_t, just in case this is used on
a NOMMU system with more than 2G pages. Makes no difference on a 32-bit
system.
(2) Report vma->vm_pgoff * PAGE_SIZE as a 64-bit value, not a 32-bit value,
lest it overflow.
(3) Move the allocation of the vm_area_struct slab back for fork.c.
(4) Use KMEM_CACHE() for both vm_area_struct and vm_region slabs.
(5) Use BUG_ON() rather than if () BUG().
(6) Make the default validate_nommu_regions() a static inline rather than a
#define.
(7) Make free_page_series()'s objection to pages with a refcount != 1 more
informative.
(8) Adjust the __put_nommu_region() banner comment to indicate that the
semaphore must be held for writing.
(9) Limit the number of warnings about munmaps of non-mmapped regions.
Reported-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: David Howells <dhowells@redhat.com>
Cc: Greg Ungerer <gerg@snapgear.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/proc/meminfo.c | 2 | ||||
-rw-r--r-- | fs/proc/task_nommu.c | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c index 43d23948384a..74ea974f5ca6 100644 --- a/fs/proc/meminfo.c +++ b/fs/proc/meminfo.c | |||
@@ -120,7 +120,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v) | |||
120 | K(i.freeram-i.freehigh), | 120 | K(i.freeram-i.freehigh), |
121 | #endif | 121 | #endif |
122 | #ifndef CONFIG_MMU | 122 | #ifndef CONFIG_MMU |
123 | K((unsigned long) atomic_read(&mmap_pages_allocated)), | 123 | K((unsigned long) atomic_long_read(&mmap_pages_allocated)), |
124 | #endif | 124 | #endif |
125 | K(i.totalswap), | 125 | K(i.totalswap), |
126 | K(i.freeswap), | 126 | K(i.freeswap), |
diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c index 343ea1216bc8..370be0a2c909 100644 --- a/fs/proc/task_nommu.c +++ b/fs/proc/task_nommu.c | |||
@@ -136,14 +136,14 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma) | |||
136 | } | 136 | } |
137 | 137 | ||
138 | seq_printf(m, | 138 | seq_printf(m, |
139 | "%08lx-%08lx %c%c%c%c %08lx %02x:%02x %lu %n", | 139 | "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n", |
140 | vma->vm_start, | 140 | vma->vm_start, |
141 | vma->vm_end, | 141 | vma->vm_end, |
142 | flags & VM_READ ? 'r' : '-', | 142 | flags & VM_READ ? 'r' : '-', |
143 | flags & VM_WRITE ? 'w' : '-', | 143 | flags & VM_WRITE ? 'w' : '-', |
144 | flags & VM_EXEC ? 'x' : '-', | 144 | flags & VM_EXEC ? 'x' : '-', |
145 | flags & VM_MAYSHARE ? flags & VM_SHARED ? 'S' : 's' : 'p', | 145 | flags & VM_MAYSHARE ? flags & VM_SHARED ? 'S' : 's' : 'p', |
146 | vma->vm_pgoff << PAGE_SHIFT, | 146 | (unsigned long long) vma->vm_pgoff << PAGE_SHIFT, |
147 | MAJOR(dev), MINOR(dev), ino, &len); | 147 | MAJOR(dev), MINOR(dev), ino, &len); |
148 | 148 | ||
149 | if (file) { | 149 | if (file) { |