Function report |
Source Code:kernel\fork.c |
Create Date:2022-07-28 08:57:43 |
| Last Modify:2020-03-17 11:04:53 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:dup_mmap
Proto:static __latent_entropy int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
Type:int
Parameter:
| Type | Parameter | Name |
|---|---|---|
| struct mm_struct * | mm | |
| struct mm_struct * | oldmm |
| 490 | uprobe_start_dup_mmap() |
| 491 | If down_write_killable( & mmap_sem) Then |
| 493 | Go to fail_uprobe_end |
| 495 | flush_cache_dup_mm(oldmm) |
| 496 | uprobe_dup_mmap(oldmm, mm) |
| 511 | rb_parent = NULL |
| 512 | pprev = list of VMAs |
| 516 | retval = khugepaged_fork(mm, oldmm) |
| 520 | prev = NULL |
| 524 | If Flags, see mm.h. & Do not copy this vma on fork Then |
| 525 | vm_stat_account(mm, Flags, see mm.h. , - vma_pages(mpnt)) |
| 526 | Continue |
| 528 | charge = 0 |
| 533 | If fatal_signal_pending(current process) Then |
| 537 | If Flags, see mm.h. & Is a VM accounted object Then |
| 540 | If security_vm_enough_memory_mm(oldmm, len) Then Go to fail_nomem |
| 544 | tmp = vm_area_dup(mpnt) |
| 545 | If Not tmp Then Go to fail_nomem |
| 547 | retval = vma_dup_policy(mpnt, tmp) |
| 548 | If retval Then Go to fail_nomem_policy |
| 551 | retval = dup_userfaultfd(tmp, & uf) |
| 552 | If retval Then Go to fail_nomem_anon_vma_fork |
| 554 | If Flags, see mm.h. & Wipe VMA contents in child. Then |
| 556 | Serialized by page_table_lock = NULL |
| 557 | If anon_vma_prepare(tmp) Then Go to fail_nomem_anon_vma_fork |
| 562 | linked list of VM areas per task, sorted by address = linked list of VM areas per task, sorted by address = NULL |
| 564 | If file Then |
| 565 | inode = file_inode(file) |
| 569 | If Flags, see mm.h. & ETXTBSY on write attempts.. Then atomic_dec( & i_writecount) |
| 571 | i_mmap_lock_write(mapping) |
| 572 | If Flags, see mm.h. & VM_SHARED Then atomic_inc( & i_mmap_writable) |
| 576 | vma_interval_tree_insert_after(tmp, mpnt, & i_mmap) |
| 587 | If is_vm_hugetlb_page(tmp) Then reset_vma_resv_huge_pages(tmp) |
| 598 | __vma_link_rb(mm, tmp, rb_link, rb_parent) |
| 602 | number of VMAs ++ |
| 603 | If Not (Flags, see mm.h. & Wipe VMA contents in child. ) Then retval = copy_page_range(mm, oldmm, mpnt) |
| 606 | If Function pointers to deal with this struct. && open Then open(tmp) |
| 613 | retval = arch_dup_mmap(oldmm, mm) |
| 614 | out : |
| 616 | flush_tlb_mm(oldmm) |
| 618 | dup_userfaultfd_complete( & uf) |
| 619 | fail_uprobe_end : |
| 620 | uprobe_end_dup_mmap() |
| 621 | Return retval |
| 622 | fail_nomem_anon_vma_fork : |
| 623 | mpol_put(vma_policy(tmp)) |
| 624 | fail_nomem_policy : |
| 625 | vm_area_free(tmp) |
| 626 | fail_nomem : |
| 628 | vm_unacct_memory(charge) |
| 629 | Go to out |
| Name | Describe |
|---|---|
| dup_mm | dup_mm() - duplicates an existing mm structure*@tsk: the task_struct with which the new mm will be associated.*@oldmm: the mm to duplicate.* Allocates a new mm structure and duplicates the provided @oldmm structure* content into it. |
| Source code conversion tool public plug-in interface | X |
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |