lkml.org 
[lkml]   [2023]   [Oct]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/4] mm: make vma_merge() and split_vma() internal
    Date
    Now the vma_merge()/split_vma() pattern has been abstracted, we use it
    entirely internally within mm/mmap.c, so make the function static. We also
    no longer need vma_merge() anywhere else except mm/mremap.c, so make it
    internal.

    In addition, the split_vma() nommu variant also need not be exported.

    Signed-off-by: Lorenzo Stoakes <lstoakes@gmail.com>
    ---
    include/linux/mm.h | 9 ---------
    mm/internal.h | 9 +++++++++
    mm/mmap.c | 8 ++++----
    mm/nommu.c | 4 ++--
    4 files changed, 15 insertions(+), 15 deletions(-)

    diff --git a/include/linux/mm.h b/include/linux/mm.h
    index c069813f215f..6aa532682094 100644
    --- a/include/linux/mm.h
    +++ b/include/linux/mm.h
    @@ -3237,16 +3237,7 @@ extern int vma_expand(struct vma_iterator *vmi, struct vm_area_struct *vma,
    struct vm_area_struct *next);
    extern int vma_shrink(struct vma_iterator *vmi, struct vm_area_struct *vma,
    unsigned long start, unsigned long end, pgoff_t pgoff);
    -extern struct vm_area_struct *vma_merge(struct vma_iterator *vmi,
    - struct mm_struct *, struct vm_area_struct *prev, unsigned long addr,
    - unsigned long end, unsigned long vm_flags, struct anon_vma *,
    - struct file *, pgoff_t, struct mempolicy *, struct vm_userfaultfd_ctx,
    - struct anon_vma_name *);
    extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
    -extern int __split_vma(struct vma_iterator *vmi, struct vm_area_struct *,
    - unsigned long addr, int new_below);
    -extern int split_vma(struct vma_iterator *vmi, struct vm_area_struct *,
    - unsigned long addr, int new_below);
    extern int insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
    extern void unlink_file_vma(struct vm_area_struct *);
    extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
    diff --git a/mm/internal.h b/mm/internal.h
    index 3a72975425bb..ddaeb9f2d9d7 100644
    --- a/mm/internal.h
    +++ b/mm/internal.h
    @@ -1011,6 +1011,15 @@ struct page *follow_trans_huge_pmd(struct vm_area_struct *vma,
    unsigned long addr, pmd_t *pmd,
    unsigned int flags);

    +/*
    + * mm/mmap.c
    + */
    +struct vm_area_struct *vma_merge(struct vma_iterator *vmi,
    + struct mm_struct *, struct vm_area_struct *prev, unsigned long addr,
    + unsigned long end, unsigned long vm_flags, struct anon_vma *,
    + struct file *, pgoff_t, struct mempolicy *, struct vm_userfaultfd_ctx,
    + struct anon_vma_name *);
    +
    enum {
    /* mark page accessed */
    FOLL_TOUCH = 1 << 16,
    diff --git a/mm/mmap.c b/mm/mmap.c
    index 8c21171b431f..58d71f84e917 100644
    --- a/mm/mmap.c
    +++ b/mm/mmap.c
    @@ -2346,8 +2346,8 @@ static void unmap_region(struct mm_struct *mm, struct ma_state *mas,
    * has already been checked or doesn't make sense to fail.
    * VMA Iterator will point to the end VMA.
    */
    -int __split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
    - unsigned long addr, int new_below)
    +static int __split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
    + unsigned long addr, int new_below)
    {
    struct vma_prepare vp;
    struct vm_area_struct *new;
    @@ -2428,8 +2428,8 @@ int __split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
    * Split a vma into two pieces at address 'addr', a new vma is allocated
    * either for the first part or the tail.
    */
    -int split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
    - unsigned long addr, int new_below)
    +static int split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
    + unsigned long addr, int new_below)
    {
    if (vma->vm_mm->map_count >= sysctl_max_map_count)
    return -ENOMEM;
    diff --git a/mm/nommu.c b/mm/nommu.c
    index f9553579389b..fc4afe924ad5 100644
    --- a/mm/nommu.c
    +++ b/mm/nommu.c
    @@ -1305,8 +1305,8 @@ SYSCALL_DEFINE1(old_mmap, struct mmap_arg_struct __user *, arg)
    * split a vma into two pieces at address 'addr', a new vma is allocated either
    * for the first part or the tail.
    */
    -int split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
    - unsigned long addr, int new_below)
    +static int split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
    + unsigned long addr, int new_below)
    {
    struct vm_area_struct *new;
    struct vm_region *region;
    --
    2.42.0
    \
     
     \ /
      Last update: 2023-10-08 22:30    [W:4.103 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site