Re: [RFC][PATCH] Convert do_no_page() to a hook to avoid DFS race

Andrew Morton
2003-05-31T00:47:05Z

"Paul E. McKenney" <paulmck@us.ibm.com> wrote:
>
> Rediffed to 2.5.70-mm2.
>
> This patch allows a distributed filesystem to avoid the
> pagefault/cross-node-invalidate race described in:
>
> http://marc.theaimsgroup.com/?l=linux-kernel&m=105286345316249&w=2
>
> This patch converts the bulk of do_no_page() into a hook that may
> be called from the ->nopage vm_operations_struct callout.

Seems reasonable.

> There
> is still an inlined do_no_page() wrapper due to the fact that
> do_anonymous_page() requires that the mm->page_table_lock be
> held on entry, while the ->nopage callouts require that this
> lock be dropped.

I sugest you change the ->nopage definition so that page_table_lock is held
on entry to ->nopage, and ->nopage must drop it at some point. This gives
the nopage implementations some more flexibility and may perhaps eliminate
that special case?

> This patch is untested.

I don't think there's a lot of point in making changes until the code which
requires those changes is accepted into the tree. Otherwise it may be
pointless churn, and there's nothing in-tree to exercise the new features.

> An alternative to this patch includes the nopagedone() patch posted
> moments ago. hch has also suggested that do_anonymous_page() be
> converted to a ->nopage callout, but this would require that all
> of the other ->nopage callouts drop mm->page_table_lock as their
> first action. If people believe that this is the right thing to
> do, I will happily produce such a patch.

That sounds better to me.