一、mm中的锁次序
1. rmap.c 中的注释
//Lock ordering in mm:
inode->i_mutex (while writing or truncating, not reading or faulting)mm->mmap_sempage->flags PG_locked (lock_page)hugetlbfs_i_mmap_rwsem_key (in huge_pmd_share)mapping->i_mmap_rwsemanon_vma->rwsemmm->page_table_lock or pte_lockpgdat->lru_lock (in mark_page_accessed, isolate_lru_page)swap_lock (in swap_duplicate, swap_info_get)mmlist_lock (in mmput, drain_mmlist and others)mapping->private_lock (in __set_page_dirty_buffers)mem_cgroup_{begin,end}_page_stat (memcg->move_lock)i_pages lock (widely used)inode->i_lock (in set_page_dirty's __mark_inode_dirty)bdi.wb->list_lock (in set_page_dirty's __mark_inode_dirty)sb_lock (within inode_lock in fs/fs-writeback.c)i_pages lock (widely used, in set_page_dirty,in arch-dependent flush_dcache_mmap_lock,within bdi.wb->list_lock in __sync_single_inode)anon_vma->rwsem,mapping->i_mutex (memory_failure, collect_procs_anon)->tasklist_lockpte map lock