Hi, The do_wp_page() implements the Copy-On-write approach. I have no idea about its doing concerning locked pages. static int do_wp_page(struct mm_struct *mm, struct vm_area_struct * vma, unsigned long address, pte_t *page_table, pmd_t *pmd, pte_t pte) { old_page = pfn_to_page(pfn); <-- old_page is in quesiton. ... ... ... if (!TestSetPageLocked(old_page)) { <-- We test the 'PG_locked' flag of old_page. If it is not set, we can further check whether the page should be copied. int reuse = can_share_swap_page(old_page); unlock_page(old_page); if (reuse) { <-- If only one process owns old_page, we should copy it. flush_cache_page(vma, address); entry = maybe_mkwrite(pte_mkyoung(pte_mkdirty(pte)), vma); ptep_set_access_flags(vma, address, page_table, entry, 1); update_mmu_cache(vma, address, entry); pte_unmap(page_table); spin_unlock(&mm->page_table_lock); return VM_FAULT_MINOR; } } pte_unmap(page_table); /* * Ok, we need to copy. Oh, well.. */ <-- At this point, we should copy old_page. ... ... ... } In conclusion, if old_page is locked or it is not locked and two or more processes own old_page, we should copy it. I don't understand why a locked page must be copied regardless of how many processes own it. Why do we give a locked page a special consideration? _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies