lkml.org 
[lkml]   [2023]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 09/48] kernel/fork: Convert forking to using the vmi iterator
    Date
    From: "Liam R. Howlett" <Liam.Howlett@Oracle.com>

    Avoid using the maple tree interface directly. This gains type safety.

    Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
    ---
    kernel/fork.c | 19 ++++++++-----------
    1 file changed, 8 insertions(+), 11 deletions(-)

    diff --git a/kernel/fork.c b/kernel/fork.c
    index 9f7fe3541897..441dcec60aae 100644
    --- a/kernel/fork.c
    +++ b/kernel/fork.c
    @@ -585,8 +585,8 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
    int retval;
    unsigned long charge = 0;
    LIST_HEAD(uf);
    - MA_STATE(old_mas, &oldmm->mm_mt, 0, 0);
    - MA_STATE(mas, &mm->mm_mt, 0, 0);
    + VMA_ITERATOR(old_vmi, oldmm, 0);
    + VMA_ITERATOR(vmi, mm, 0);

    uprobe_start_dup_mmap();
    if (mmap_write_lock_killable(oldmm)) {
    @@ -613,11 +613,11 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
    goto out;
    khugepaged_fork(mm, oldmm);

    - retval = mas_expected_entries(&mas, oldmm->map_count);
    + retval = vma_iter_bulk_alloc(&vmi, oldmm->map_count);
    if (retval)
    goto out;

    - mas_for_each(&old_mas, mpnt, ULONG_MAX) {
    + for_each_vma(old_vmi, mpnt) {
    struct file *file;

    if (mpnt->vm_flags & VM_DONTCOPY) {
    @@ -683,11 +683,8 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
    hugetlb_dup_vma_private(tmp);

    /* Link the vma into the MT */
    - mas.index = tmp->vm_start;
    - mas.last = tmp->vm_end - 1;
    - mas_store(&mas, tmp);
    - if (mas_is_err(&mas))
    - goto fail_nomem_mas_store;
    + if (vma_iter_bulk_store(&vmi, tmp))
    + goto fail_nomem_vmi_store;

    mm->map_count++;
    if (!(tmp->vm_flags & VM_WIPEONFORK))
    @@ -702,7 +699,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
    /* a new mm has just been created */
    retval = arch_dup_mmap(oldmm, mm);
    loop_out:
    - mas_destroy(&mas);
    + vma_iter_free(&vmi);
    out:
    mmap_write_unlock(mm);
    flush_tlb_mm(oldmm);
    @@ -712,7 +709,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
    uprobe_end_dup_mmap();
    return retval;

    -fail_nomem_mas_store:
    +fail_nomem_vmi_store:
    unlink_anon_vmas(tmp);
    fail_nomem_anon_vma_fork:
    mpol_put(vma_policy(tmp));
    --
    2.35.1
    \
     
     \ /
      Last update: 2023-03-26 23:43    [W:3.735 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site