- 论坛徽章:
- 0
|
function列在下面,我大概敘述一下對這個function的理解。
26 static void zap_pte(struct mm_struct *mm, struct vm_area_struct *vma,
27 unsigned long addr, pte_t *ptep)
28 {
29 pte_t pte = *ptep;
30
31 if (pte_present(pte)) {
32 struct page *page;
33
要把page還回去,要先做flush的動作
34 flush_cache_page(vma, addr, pte_pfn(pte));
取出pte的值,清除pte,同時也要記得清除tlb相對應的欄位
35 pte = ptep_clear_flush(vma, addr, ptep);
得到pte相對應pfn的page
36 page = vm_normal_page(vma, addr, pte);
37 if (page) {
38 if (pte_dirty(pte))
39 set_page_dirty(page);
移除在這個page上面相對應的map
40 page_remove_rmap(page);
把page_cache釋放掉:裡面是否要判斷share或者是private,如果是share,是不是還要寫回
file去 ?
41 page_cache_release(page);
42 update_hiwater_rss(mm);
43 dec_mm_counter(mm, file_rss);
44 }
45 } else {
46 if (!pte_file(pte))
47 free_swap_and_cache(pte_to_swp_entry(pte));
48 pte_clear_not_present_full(mm, addr, ptep, 0);
49 }
50 }
關鍵在於page_cache_release這行,是不是要進行寫回檔案系統的動作,原因是page cache有可能是share。
但是在這個function裡面找不到相關寫回file system的動作,只有釋放回去per cpu cache。有人有相關的想法嗎?
謝謝 |
|