Re: mm/ksm.c seems to be doing an unneeded _notify.

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

 



* Robin Holt (holt@xxxxxxx) wrote:
> While reviewing ksm.c, I noticed that ksm.c does:
> 
>         if (pte_write(*ptep)) {
>                 pte_t entry;
> 
>                 swapped = PageSwapCache(page);
>                 flush_cache_page(vma, addr, page_to_pfn(page));
>                 /*
>                  * Ok this is tricky, when get_user_pages_fast() run it doesnt
>                  * take any lock, therefore the check that we are going to make
>                  * with the pagecount against the mapcount is racey and
>                  * O_DIRECT can happen right after the check.
>                  * So we clear the pte and flush the tlb before the check
>                  * this assure us that no O_DIRECT can happen after the check
>                  * or in the middle of the check.
>                  */
>                 entry = ptep_clear_flush(vma, addr, ptep);
>                 /*
>                  * Check that no O_DIRECT or similar I/O is in progress on the
>                  * page 
>                  */
>                 if (page_mapcount(page) + 1 + swapped != page_count(page)) {
>                         set_pte_at_notify(mm, addr, ptep, entry);
>                         goto out_unlock;
>                 }
>                 entry = pte_wrprotect(entry);
>                 set_pte_at_notify(mm, addr, ptep, entry);
> 
> 
> I would think the error case (where the page has an elevated page_count)
> should not be using set_pte_at_notify.  In that event, you are simply
> restoring the previous value.  Have I missed something or is this an
> extraneous _notify?

It does look extraneous to me as well.

thanks,
-chris

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxxx  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]