[Devel] [PATCH] mm: Kill allocate_vma() and free_vma()
Kirill Tkhai
ktkhai at virtuozzo.com
Thu Nov 9 14:01:46 MSK 2017
Currently they are noops and just introduce unnecessary
changes in "Initial patch". Kill them.
Please, merge this to "Initial patch" on rebase.
Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
---
fs/exec.c | 4 ++--
include/linux/mm.h | 4 +---
kernel/fork.c | 8 ++++----
mm/mmap.c | 22 +++++++++++-----------
4 files changed, 18 insertions(+), 20 deletions(-)
diff --git a/fs/exec.c b/fs/exec.c
index c8450118925..bbbe293ea24 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -257,7 +257,7 @@ static int __bprm_mm_init(struct linux_binprm *bprm)
NULL, UB_SOFT))
goto err_charge;
- bprm->vma = vma = allocate_vma(mm, GFP_KERNEL | __GFP_ZERO);
+ bprm->vma = vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
if (!vma)
goto err_alloc;
@@ -289,7 +289,7 @@ static int __bprm_mm_init(struct linux_binprm *bprm)
err:
up_write(&mm->mmap_sem);
bprm->vma = NULL;
- free_vma(mm, vma);
+ kmem_cache_free(vm_area_cachep, vma);
err_alloc:
ub_memory_uncharge(mm, PAGE_SIZE, VM_STACK_FLAGS | mm->def_flags, NULL);
err_charge:
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 897d7cfd226..57a63882fff 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -93,9 +93,7 @@ extern int overcommit_kbytes_handler(struct ctl_table *, int, void __user *,
* mmap() functions).
*/
-extern struct kmem_cache *__vm_area_cachep;
-#define allocate_vma(mm, gfp_flags) kmem_cache_alloc(__vm_area_cachep, gfp_flags)
-#define free_vma(mm, vma) kmem_cache_free(__vm_area_cachep, vma)
+extern struct kmem_cache *vm_area_cachep;
#ifndef CONFIG_MMU
extern struct rb_root nommu_region_tree;
diff --git a/kernel/fork.c b/kernel/fork.c
index 3ad0977c698..78a47e0f471 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -235,7 +235,7 @@ struct kmem_cache *files_cachep;
struct kmem_cache *fs_cachep;
/* SLAB cache for vm_area_struct structures */
-struct kmem_cache *__vm_area_cachep;
+struct kmem_cache *vm_area_cachep;
/* SLAB cache for mm_struct structures (tsk->mm) */
static struct kmem_cache *mm_cachep;
@@ -458,7 +458,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
goto fail_nomem;
charge = len;
}
- tmp = allocate_vma(mm, GFP_KERNEL);
+ tmp = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
if (!tmp)
goto fail_nomem;
*tmp = *mpnt;
@@ -538,7 +538,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
fail_nomem_anon_vma_fork:
mpol_put(pol);
fail_nomem_policy:
- free_vma(mm, tmp);
+ kmem_cache_free(vm_area_cachep, tmp);
fail_nomem:
ub_memory_uncharge(mm, mpnt->vm_end - mpnt->vm_start,
mpnt->vm_flags & ~VM_LOCKED, mpnt->vm_file);
@@ -1923,7 +1923,7 @@ void __init proc_caches_init(void)
sizeof(struct mm_struct), ARCH_MIN_MMSTRUCT_ALIGN,
SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_NOTRACK|SLAB_ACCOUNT,
NULL);
- __vm_area_cachep = KMEM_CACHE(vm_area_struct, SLAB_PANIC|SLAB_ACCOUNT);
+ vm_area_cachep = KMEM_CACHE(vm_area_struct, SLAB_PANIC|SLAB_ACCOUNT);
mmap_init();
nsproxy_cache_init();
}
diff --git a/mm/mmap.c b/mm/mmap.c
index 3e9eeea3522..b66e5f23b54 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -290,7 +290,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
if (vma->vm_file)
fput(vma->vm_file);
mpol_put(vma_policy(vma));
- free_vma(vma->vm_mm, vma);
+ kmem_cache_free(vm_area_cachep, vma);
return next;
}
@@ -1001,7 +1001,7 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
anon_vma_merge(vma, next);
mm->map_count--;
mpol_put(vma_policy(next));
- free_vma(mm, next);
+ kmem_cache_free(vm_area_cachep, next);
/*
* In mprotect's case 6 (see comments on vma_merge),
* we must remove another next too. It would clutter
@@ -1742,7 +1742,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
* specific mapper. the address has already been validated, but
* not unmapped, but the maps are removed from the list.
*/
- vma = allocate_vma(mm, GFP_KERNEL | __GFP_ZERO);
+ vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
if (!vma) {
error = -ENOMEM;
goto unacct_error;
@@ -1866,7 +1866,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
if (vm_flags & VM_DENYWRITE)
allow_write_access(file);
free_vma:
- free_vma(mm, vma);
+ kmem_cache_free(vm_area_cachep, vma);
unacct_error:
if (ub_charged)
ub_memory_uncharge(mm, len, vm_flags, file);
@@ -2679,7 +2679,7 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
~(huge_page_mask(hstate_vma(vma)))))
return -EINVAL;
- new = allocate_vma(mm, GFP_KERNEL);
+ new = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
if (!new)
goto out_err;
@@ -2730,7 +2730,7 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
out_free_mpol:
mpol_put(pol);
out_free_vma:
- free_vma(mm, new);
+ kmem_cache_free(vm_area_cachep, new);
out_err:
return err;
}
@@ -3046,7 +3046,7 @@ static unsigned long do_brk_flags(unsigned long addr, unsigned long len,
/*
* create a vma struct for an anonymous mapping
*/
- vma = allocate_vma(mm, GFP_KERNEL | __GFP_ZERO);
+ vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
if (!vma)
goto fail_alloc;
@@ -3243,7 +3243,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
}
*need_rmap_locks = (new_vma->vm_pgoff <= vma->vm_pgoff);
} else {
- new_vma = allocate_vma(mm, GFP_KERNEL);
+ new_vma = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
if (new_vma) {
*new_vma = *vma;
new_vma->vm_start = addr;
@@ -3269,7 +3269,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
out_free_mempol:
mpol_put(pol);
out_free_vma:
- free_vma(mm, new_vma);
+ kmem_cache_free(vm_area_cachep, new_vma);
return NULL;
}
@@ -3345,7 +3345,7 @@ int install_special_mapping(struct mm_struct *mm,
int ret;
struct vm_area_struct *vma;
- vma = allocate_vma(mm, GFP_KERNEL | __GFP_ZERO);
+ vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
if (unlikely(vma == NULL))
return -ENOMEM;
@@ -3371,7 +3371,7 @@ int install_special_mapping(struct mm_struct *mm,
return 0;
out:
- free_vma(mm, vma);
+ kmem_cache_free(vm_area_cachep, vma);
return ret;
}
More information about the Devel
mailing list