]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - mm/vmalloc.c
ovl: Fix ovl_getattr() to get number of blocks from lower
[linux.git] / mm / vmalloc.c
index 12bd82e6554ecfb2333507a8d09c39509198ef18..cfea25be77548cfad6ffc5d4c4d3f60445804f52 100644 (file)
@@ -1128,15 +1128,16 @@ void vm_unmap_ram(const void *mem, unsigned int count)
        BUG_ON(addr > VMALLOC_END);
        BUG_ON(!PAGE_ALIGNED(addr));
 
-       debug_check_no_locks_freed(mem, size);
-
        if (likely(count <= VMAP_MAX_ALLOC)) {
+               debug_check_no_locks_freed(mem, size);
                vb_free(mem, size);
                return;
        }
 
        va = find_vmap_area(addr);
        BUG_ON(!va);
+       debug_check_no_locks_freed((void *)va->va_start,
+                                   (va->va_end - va->va_start));
        free_unmap_vmap_area(va);
 }
 EXPORT_SYMBOL(vm_unmap_ram);
@@ -1504,16 +1505,17 @@ static void __vunmap(const void *addr, int deallocate_pages)
                        addr))
                return;
 
-       area = remove_vm_area(addr);
+       area = find_vmap_area((unsigned long)addr)->vm;
        if (unlikely(!area)) {
                WARN(1, KERN_ERR "Trying to vfree() nonexistent vm area (%p)\n",
                                addr);
                return;
        }
 
-       debug_check_no_locks_freed(addr, get_vm_area_size(area));
-       debug_check_no_obj_freed(addr, get_vm_area_size(area));
+       debug_check_no_locks_freed(area->addr, get_vm_area_size(area));
+       debug_check_no_obj_freed(area->addr, get_vm_area_size(area));
 
+       remove_vm_area(addr);
        if (deallocate_pages) {
                int i;
 
@@ -2739,11 +2741,11 @@ static const struct seq_operations vmalloc_op = {
 static int __init proc_vmalloc_init(void)
 {
        if (IS_ENABLED(CONFIG_NUMA))
-               proc_create_seq_private("vmallocinfo", S_IRUSR, NULL,
+               proc_create_seq_private("vmallocinfo", 0400, NULL,
                                &vmalloc_op,
                                nr_node_ids * sizeof(unsigned int), NULL);
        else
-               proc_create_seq("vmallocinfo", S_IRUSR, NULL, &vmalloc_op);
+               proc_create_seq("vmallocinfo", 0400, NULL, &vmalloc_op);
        return 0;
 }
 module_init(proc_vmalloc_init);