2000-11-07 00:01:49

by Jeff Garzik

[permalink] [raw]
Subject: swapout vs. filemap_sync_pte...?

The address_space::writepage callback is called from try_to_swap_out()
path, and also from the filemap_sync_pte() path. There appears to be no
way to tell the difference between the two callers. This is not good
because the semantics are very different: "sync this page" versus "page
is going away".

Should address_space::writepage get passed an additional arg, indicating
the caller?
Should filemap_sync_pte call address_space::sync_page instead of
::writepage?

Either way, this allows the writepage function to know whether it really
needs to store the page, because it is going away, or not.

I will admit I might be missing something obvious... I'm pretty new to
this part of the code.

Jeff


--
Jeff Garzik | "When I do this, my computer freezes."
Building 1024 | -user
MandrakeSoft | "Don't do that."
| -level 1


2000-11-07 23:07:07

by Alexander Viro

[permalink] [raw]
Subject: Re: swapout vs. filemap_sync_pte...?



On Mon, 6 Nov 2000, Jeff Garzik wrote:

> The address_space::writepage callback is called from try_to_swap_out()
> path, and also from the filemap_sync_pte() path. There appears to be no
> way to tell the difference between the two callers. This is not good
> because the semantics are very different: "sync this page" versus "page
> is going away".

For the filemap VMAs (i.e. ones that are based on address_space with
backstore) it is the same thing. For something like tmpfs you have
different VMA-level semantics. Ergo, different VMA methods. They can
be shared with filemap ones, but you definitely don't want ->vm_ops->sync().
End of the problem...