- 论坛徽章:
- 0
|
按照理解,page的mapcount就是页面映射到页表的个数,应该就是反向映射的链表长度大小或者优先树的节点总数。但是kernel代码为什么要重复判断呢:
static int page_referenced_anon(struct page *page,
struct mem_cgroup *memcg,
unsigned long *vm_flags)
{
。。
mapcount = page_mapcount(page);
//这里遍历反向映射的节点
list_for_each_entry(avc, &anon_vma->head, same_anon_vma) {
struct vm_area_struct *vma = avc->vma;
referenced += page_referenced_one(page, vma, address,
&mapcount, vm_flags);
//这里还要判断mapcount的数量,这不是重复吗?
if (!mapcount)
break;
}
。。
}
对于file mapping的reference查找函数page_referenced_file,也是要做同样的判断。
对于linux kernel都是代码精巧,关键函数都没有废代码,这里为啥要重复判断呢?有什么特殊情况吗?
|
|