diff options
author | Adam Lackorzynski <adam@os.inf.tu-dresden.de> | 2009-01-04 15:00:46 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-04 16:33:20 -0500 |
commit | 2e4e27c7d082b2198b63041310609d7191185a9d (patch) | |
tree | 4b994ab4569e4510ff4dd4d357807121ab802782 | |
parent | 7b574b7b0124ed344911f5d581e9bc2d83bbeb19 (diff) |
vmalloc.c: fix flushing in vmap_page_range()
The flush_cache_vmap in vmap_page_range() is called with the end of the
range twice. The following patch fixes this for me.
Signed-off-by: Adam Lackorzynski <adam@os.inf.tu-dresden.de>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | mm/vmalloc.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 1ddb77ba3995..7465f22fec0c 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
@@ -151,11 +151,12 @@ static int vmap_pud_range(pgd_t *pgd, unsigned long addr, | |||
151 | * | 151 | * |
152 | * Ie. pte at addr+N*PAGE_SIZE shall point to pfn corresponding to pages[N] | 152 | * Ie. pte at addr+N*PAGE_SIZE shall point to pfn corresponding to pages[N] |
153 | */ | 153 | */ |
154 | static int vmap_page_range(unsigned long addr, unsigned long end, | 154 | static int vmap_page_range(unsigned long start, unsigned long end, |
155 | pgprot_t prot, struct page **pages) | 155 | pgprot_t prot, struct page **pages) |
156 | { | 156 | { |
157 | pgd_t *pgd; | 157 | pgd_t *pgd; |
158 | unsigned long next; | 158 | unsigned long next; |
159 | unsigned long addr = start; | ||
159 | int err = 0; | 160 | int err = 0; |
160 | int nr = 0; | 161 | int nr = 0; |
161 | 162 | ||
@@ -167,7 +168,7 @@ static int vmap_page_range(unsigned long addr, unsigned long end, | |||
167 | if (err) | 168 | if (err) |
168 | break; | 169 | break; |
169 | } while (pgd++, addr = next, addr != end); | 170 | } while (pgd++, addr = next, addr != end); |
170 | flush_cache_vmap(addr, end); | 171 | flush_cache_vmap(start, end); |
171 | 172 | ||
172 | if (unlikely(err)) | 173 | if (unlikely(err)) |
173 | return err; | 174 | return err; |