Skip to contentSkip to conversation

swapout vs. filemap_sync_pte...?

DISCUSSION Jeff Garzik 2 participants 2 messages Nov 7, 2000

lore
Share & tools
lore
#0 lore raw

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

Signature · 8 lines
Jeff Garzik             | "When I do this, my computer freezes."
Building 1024           |          -user
MandrakeSoft            | "Don't do that."
                        |          -level 1
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
#1 lore raw
Quoted 5 lines · Jeff Garzik

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...

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/