| Function report | 
| Source Code: mm\swapfile.c | Create Date:2022-07-28 15:19:09 | 
| Last Modify:2020-03-17 22:19:49 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:SYSCALL_DEFINE1
Proto:SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
Type:
Parameter:Nothing
| 2517 | struct swap_info_struct * p = NULL | 
| 2525 | found = 0 | 
| 2528 | If Not Check operation authority Then Return -EPERM | 
| 2533 | pathname = getname(specialfile) | 
| 2537 | victim = file_open_name(pathname, O_RDWR | O_LARGEFILE, 0) | 
| 2545 | If SWP_USED etc: see above & SWP_WRITEOK Then | 
| 2552 | If Not found Then | 
| 2557 | If Not security_vm_enough_memory_mm(mm, al of usable pages of swap ) Then vm_unacct_memory(al of usable pages of swap ) | 
| 2559 | Else | 
| 2564 | del_from_avail_list(p) | 
| 2566 | If swap priority of this type < 0 Then | 
| 2578 | least_priority++ | 
| 2582 | protected with swap_lock. reading in vm_swap_full() doesn't need lock -= al of usable pages of swap | 
| 2583 | SWP_USED etc: see above &= ~SWP_WRITEOK | 
| 2585 | spin_unlock( & swap_lock) | 
| 2589 | set_current_oom_origin() | 
| 2590 | err = If the boolean frontswap is true, only unuse pages_to_unuse pages;* pages_to_unuse==0 means all pages; ignored if frontswap is false | 
| 2591 | clear_current_oom_origin() | 
| 2593 | If err Then | 
| 2604 | SWP_USED etc: see above &= ~SWP_VALID | 
| 2606 | spin_unlock( & swap_lock) | 
| 2616 | If SWP_USED etc: see above & SWP_CONTINUED Then _swap_count_continuations - swapoff free all the continuation pages* appended to the swap_map, after swap_map is quiesced, before vfree'ing it. | 
| 2619 | If Not swap device or bdev of swap file || Not blk_queue_nonrot(bdev_get_queue(swap device or bdev of swap file )) Then atomic_dec( & nr_rotate_swap) | 
| 2622 | mutex_lock( & swapon_mutex) | 
| 2628 | dex of last free in swap_map = 0 | 
| 2629 | When SWP_USED etc: see above >= SWP_SCANNING cycle | 
| 2631 | spin_unlock( & swap_lock) | 
| 2632 | schedule_timeout_uninterruptible(1) | 
| 2637 | swap_file = seldom referenced | 
| 2638 | old_block_size = seldom referenced | 
| 2639 | seldom referenced = NULL | 
| 2640 | xtent of the swap_map = 0 | 
| 2642 | vmalloc'ed array of usage counts = NULL | 
| 2644 | cluster info. Only for SSD = NULL | 
| 2645 | frontswap_map = frontswap_map_get(p) | 
| 2647 | spin_unlock( & swap_lock) | 
| 2649 | frontswap_map_set(p, NULL) | 
| 2652 | per cpu's swap location = NULL | 
| 2664 | set_blocksize(bdev, old_block_size) | 
| 2668 | inode_lock(inode) | 
| 2670 | inode_unlock(inode) | 
| 2671 | filp_close(swap_file, NULL) | 
| 2679 | SWP_USED etc: see above = 0 | 
| 2680 | spin_unlock( & swap_lock) | 
| 2682 | err = 0 | 
| 2684 | wake_up_interruptible( & proc_poll_wait) | 
| 2686 | out_dput : | 
| 2687 | filp_close(victim, NULL) | 
| 2688 | out : | 
| 2690 | Return err | 
| 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 |