diff options
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/backing-dev.c | 2 | ||||
| -rw-r--r-- | mm/filemap.c | 15 | ||||
| -rw-r--r-- | mm/memory.c | 4 | ||||
| -rw-r--r-- | mm/mmap.c | 2 | ||||
| -rw-r--r-- | mm/mprotect.c | 2 | ||||
| -rw-r--r-- | mm/mremap.c | 2 | ||||
| -rw-r--r-- | mm/msync.c | 2 | ||||
| -rw-r--r-- | mm/nommu.c | 2 | ||||
| -rw-r--r-- | mm/vmalloc.c | 5 |
9 files changed, 21 insertions, 15 deletions
diff --git a/mm/backing-dev.c b/mm/backing-dev.c index 801c08b046e6..a7c6c5613ec9 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c | |||
| @@ -223,7 +223,7 @@ int bdi_init(struct backing_dev_info *bdi) | |||
| 223 | bdi->max_prop_frac = PROP_FRAC_BASE; | 223 | bdi->max_prop_frac = PROP_FRAC_BASE; |
| 224 | 224 | ||
| 225 | for (i = 0; i < NR_BDI_STAT_ITEMS; i++) { | 225 | for (i = 0; i < NR_BDI_STAT_ITEMS; i++) { |
| 226 | err = percpu_counter_init_irq(&bdi->bdi_stat[i], 0); | 226 | err = percpu_counter_init(&bdi->bdi_stat[i], 0); |
| 227 | if (err) | 227 | if (err) |
| 228 | goto err; | 228 | goto err; |
| 229 | } | 229 | } |
diff --git a/mm/filemap.c b/mm/filemap.c index f3e5f8944d17..f5769b4dc075 100644 --- a/mm/filemap.c +++ b/mm/filemap.c | |||
| @@ -1766,7 +1766,7 @@ int should_remove_suid(struct dentry *dentry) | |||
| 1766 | if (unlikely((mode & S_ISGID) && (mode & S_IXGRP))) | 1766 | if (unlikely((mode & S_ISGID) && (mode & S_IXGRP))) |
| 1767 | kill |= ATTR_KILL_SGID; | 1767 | kill |= ATTR_KILL_SGID; |
| 1768 | 1768 | ||
| 1769 | if (unlikely(kill && !capable(CAP_FSETID))) | 1769 | if (unlikely(kill && !capable(CAP_FSETID) && S_ISREG(mode))) |
| 1770 | return kill; | 1770 | return kill; |
| 1771 | 1771 | ||
| 1772 | return 0; | 1772 | return 0; |
| @@ -2140,19 +2140,24 @@ EXPORT_SYMBOL(generic_file_direct_write); | |||
| 2140 | * Find or create a page at the given pagecache position. Return the locked | 2140 | * Find or create a page at the given pagecache position. Return the locked |
| 2141 | * page. This function is specifically for buffered writes. | 2141 | * page. This function is specifically for buffered writes. |
| 2142 | */ | 2142 | */ |
| 2143 | struct page *__grab_cache_page(struct address_space *mapping, pgoff_t index) | 2143 | struct page *grab_cache_page_write_begin(struct address_space *mapping, |
| 2144 | pgoff_t index, unsigned flags) | ||
| 2144 | { | 2145 | { |
| 2145 | int status; | 2146 | int status; |
| 2146 | struct page *page; | 2147 | struct page *page; |
| 2148 | gfp_t gfp_notmask = 0; | ||
| 2149 | if (flags & AOP_FLAG_NOFS) | ||
| 2150 | gfp_notmask = __GFP_FS; | ||
| 2147 | repeat: | 2151 | repeat: |
| 2148 | page = find_lock_page(mapping, index); | 2152 | page = find_lock_page(mapping, index); |
| 2149 | if (likely(page)) | 2153 | if (likely(page)) |
| 2150 | return page; | 2154 | return page; |
| 2151 | 2155 | ||
| 2152 | page = page_cache_alloc(mapping); | 2156 | page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~gfp_notmask); |
| 2153 | if (!page) | 2157 | if (!page) |
| 2154 | return NULL; | 2158 | return NULL; |
| 2155 | status = add_to_page_cache_lru(page, mapping, index, GFP_KERNEL); | 2159 | status = add_to_page_cache_lru(page, mapping, index, |
| 2160 | GFP_KERNEL & ~gfp_notmask); | ||
| 2156 | if (unlikely(status)) { | 2161 | if (unlikely(status)) { |
| 2157 | page_cache_release(page); | 2162 | page_cache_release(page); |
| 2158 | if (status == -EEXIST) | 2163 | if (status == -EEXIST) |
| @@ -2161,7 +2166,7 @@ repeat: | |||
| 2161 | } | 2166 | } |
| 2162 | return page; | 2167 | return page; |
| 2163 | } | 2168 | } |
| 2164 | EXPORT_SYMBOL(__grab_cache_page); | 2169 | EXPORT_SYMBOL(grab_cache_page_write_begin); |
| 2165 | 2170 | ||
| 2166 | static ssize_t generic_perform_write(struct file *file, | 2171 | static ssize_t generic_perform_write(struct file *file, |
| 2167 | struct iov_iter *i, loff_t pos) | 2172 | struct iov_iter *i, loff_t pos) |
diff --git a/mm/memory.c b/mm/memory.c index 0a2010a9518c..7b9db658aca2 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
| @@ -2266,7 +2266,7 @@ int vmtruncate(struct inode * inode, loff_t offset) | |||
| 2266 | unmap_mapping_range(mapping, offset + PAGE_SIZE - 1, 0, 1); | 2266 | unmap_mapping_range(mapping, offset + PAGE_SIZE - 1, 0, 1); |
| 2267 | } | 2267 | } |
| 2268 | 2268 | ||
| 2269 | if (inode->i_op && inode->i_op->truncate) | 2269 | if (inode->i_op->truncate) |
| 2270 | inode->i_op->truncate(inode); | 2270 | inode->i_op->truncate(inode); |
| 2271 | return 0; | 2271 | return 0; |
| 2272 | 2272 | ||
| @@ -2286,7 +2286,7 @@ int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end) | |||
| 2286 | * a way to truncate a range of blocks (punch a hole) - | 2286 | * a way to truncate a range of blocks (punch a hole) - |
| 2287 | * we should return failure right now. | 2287 | * we should return failure right now. |
| 2288 | */ | 2288 | */ |
| 2289 | if (!inode->i_op || !inode->i_op->truncate_range) | 2289 | if (!inode->i_op->truncate_range) |
| 2290 | return -ENOSYS; | 2290 | return -ENOSYS; |
| 2291 | 2291 | ||
| 2292 | mutex_lock(&inode->i_mutex); | 2292 | mutex_lock(&inode->i_mutex); |
| @@ -3,7 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | * Written by obz. | 4 | * Written by obz. |
| 5 | * | 5 | * |
| 6 | * Address space accounting code <alan@redhat.com> | 6 | * Address space accounting code <alan@lxorguk.ukuu.org.uk> |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | #include <linux/slab.h> | 9 | #include <linux/slab.h> |
diff --git a/mm/mprotect.c b/mm/mprotect.c index fded06f923f4..cfb4c4852062 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * (C) Copyright 1994 Linus Torvalds | 4 | * (C) Copyright 1994 Linus Torvalds |
| 5 | * (C) Copyright 2002 Christoph Hellwig | 5 | * (C) Copyright 2002 Christoph Hellwig |
| 6 | * | 6 | * |
| 7 | * Address space accounting code <alan@redhat.com> | 7 | * Address space accounting code <alan@lxorguk.ukuu.org.uk> |
| 8 | * (C) Copyright 2002 Red Hat Inc, All Rights Reserved | 8 | * (C) Copyright 2002 Red Hat Inc, All Rights Reserved |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
diff --git a/mm/mremap.c b/mm/mremap.c index 58a2908f42f5..646de959aa58 100644 --- a/mm/mremap.c +++ b/mm/mremap.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | * (C) Copyright 1996 Linus Torvalds | 4 | * (C) Copyright 1996 Linus Torvalds |
| 5 | * | 5 | * |
| 6 | * Address space accounting code <alan@redhat.com> | 6 | * Address space accounting code <alan@lxorguk.ukuu.org.uk> |
| 7 | * (C) Copyright 2002 Red Hat Inc, All Rights Reserved | 7 | * (C) Copyright 2002 Red Hat Inc, All Rights Reserved |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
diff --git a/mm/msync.c b/mm/msync.c index 144a7570535d..07dae08cf31c 100644 --- a/mm/msync.c +++ b/mm/msync.c | |||
| @@ -82,7 +82,7 @@ asmlinkage long sys_msync(unsigned long start, size_t len, int flags) | |||
| 82 | (vma->vm_flags & VM_SHARED)) { | 82 | (vma->vm_flags & VM_SHARED)) { |
| 83 | get_file(file); | 83 | get_file(file); |
| 84 | up_read(&mm->mmap_sem); | 84 | up_read(&mm->mmap_sem); |
| 85 | error = do_fsync(file, 0); | 85 | error = vfs_fsync(file, file->f_path.dentry, 0); |
| 86 | fput(file); | 86 | fput(file); |
| 87 | if (error || start >= end) | 87 | if (error || start >= end) |
| 88 | goto out; | 88 | goto out; |
diff --git a/mm/nommu.c b/mm/nommu.c index 7695dc850785..1c28ea3a4e9c 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
| @@ -86,7 +86,7 @@ do_expand: | |||
| 86 | i_size_write(inode, offset); | 86 | i_size_write(inode, offset); |
| 87 | 87 | ||
| 88 | out_truncate: | 88 | out_truncate: |
| 89 | if (inode->i_op && inode->i_op->truncate) | 89 | if (inode->i_op->truncate) |
| 90 | inode->i_op->truncate(inode); | 90 | inode->i_op->truncate(inode); |
| 91 | return 0; | 91 | return 0; |
| 92 | out_sig: | 92 | out_sig: |
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; |
