[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: A couple of questions
Hi Stephen,
Stephen C. Tweedie wrote:-
> Hi,
>
[..snip..]
>
> > 2) The last 2 of the 3 branches to end_wp_page seem to me to be
> > impossible code paths.
>
> > if (!pte_present(pte))
> > goto end_wp_page;
> > if (pte_write(pte))
> > goto end_wp_page;
>
> No, the start of do_wp_page() looks like:
>
> pte = *page_table;
> new_page = __get_free_page(GFP_USER);
>
> and the get_free_page() call can block if we are out of memory, dropping
> the kernel lock in the process. The page table can be modified by
> kswapd during this interval.
Thanks for your reply. I think you've missed my point on this one.
The variable "pte" is set before calling __get_free_page(), and being
local cannot be modified by other processes. Hence I still believe
the 2 branches shown are impossible, their negative having been the
condition for entering do_wp_page().
The case you mention is captured by the initial test
if (pte_val(*page_table) != pte_val(pte))
goto end_wp_page;
performed before the two above. Do you agree?
Cheers,
Neil.
--
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/