Anton Altaparmakov [off-list ref] wrote:
Below is a patch which adds a function
mm/filemap.c::find_or_create_pages(), locks a range of pages. Please see
the function description in the patch for details.
This isn't very nice, is it, really? Kind of a square peg in a round hole.
If you took the approach of defining a custom file_operations.write() then
I'd imagine that the write() side of things would fall out fairly neatly:
no need for s_umount and i_sem needs to be taken anyway. No trylocking.
And for the vmscan->writepage() side of things I wonder if it would be
possible to overload the mapping's ->nopage handler. If the target page
lies in a hole, go off and allocate all the necessary pagecache pages, zero
them, mark them dirty?