]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - mm/mmap.c
ocfs2: avoid system inode ref confusion by adding mutex lock
[mirror_ubuntu-zesty-kernel.git] / mm / mmap.c
index 20ff0c33274c27cbb23a78335f484765dc9f9e27..81ba54ff96c79cf82293b3740647aeefb8f08b58 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2918,7 +2918,7 @@ static const struct vm_operations_struct special_mapping_vmops = {
  * The array pointer and the pages it points to are assumed to stay alive
  * for as long as this mapping might exist.
  */
-int install_special_mapping(struct mm_struct *mm,
+struct vm_area_struct *_install_special_mapping(struct mm_struct *mm,
                            unsigned long addr, unsigned long len,
                            unsigned long vm_flags, struct page **pages)
 {
@@ -2927,7 +2927,7 @@ int install_special_mapping(struct mm_struct *mm,
 
        vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
        if (unlikely(vma == NULL))
-               return -ENOMEM;
+               return ERR_PTR(-ENOMEM);
 
        INIT_LIST_HEAD(&vma->anon_vma_chain);
        vma->vm_mm = mm;
@@ -2948,11 +2948,23 @@ int install_special_mapping(struct mm_struct *mm,
 
        perf_event_mmap(vma);
 
-       return 0;
+       return vma;
 
 out:
        kmem_cache_free(vm_area_cachep, vma);
-       return ret;
+       return ERR_PTR(ret);
+}
+
+int install_special_mapping(struct mm_struct *mm,
+                           unsigned long addr, unsigned long len,
+                           unsigned long vm_flags, struct page **pages)
+{
+       struct vm_area_struct *vma = _install_special_mapping(mm,
+                           addr, len, vm_flags, pages);
+
+       if (IS_ERR(vma))
+               return PTR_ERR(vma);
+       return 0;
 }
 
 static DEFINE_MUTEX(mm_all_locks_mutex);