Why a locked page must be copied in COW?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux