afs: Stop implementing ->writepage()
authorDavid Howells <dhowells@redhat.com>
Fri, 18 Nov 2022 07:57:27 +0000 (07:57 +0000)
committerDavid Howells <dhowells@redhat.com>
Thu, 22 Dec 2022 11:40:35 +0000 (11:40 +0000)
commita9eb558a5bea66cc43950632f5fffec6b5795233
tree45973ad157b1b3ff41453925f891b8c01a061f4c
parentb3d3ca556757577c95a6bc786a5b6a48c23f00fa
afs: Stop implementing ->writepage()

We're trying to get rid of the ->writepage() hook[1].  Stop afs from using
it by unlocking the page and calling afs_writepages_region() rather than
folio_write_one().

A flag is passed to afs_writepages_region() to indicate that it should only
write a single region so that we don't flush the entire file in
->write_begin(), but do add other dirty data to the region being written to
try and reduce the number of RPC ops.

This requires ->migrate_folio() to be implemented, so point that at
filemap_migrate_folio() for files and also for symlinks and directories.

This can be tested by turning on the afs_folio_dirty tracepoint and then
doing something like:

   xfs_io -c "w 2223 7000" -c "w 15000 22222" -c "w 23 7" /afs/my/test/foo

and then looking in the trace to see if the write at position 15000 gets
stored before page 0 gets dirtied for the write at position 23.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Christoph Hellwig <hch@lst.de>
cc: Matthew Wilcox <willy@infradead.org>
cc: linux-afs@lists.infradead.org
Link: https://lore.kernel.org/r/20221113162902.883850-1-hch@lst.de/
Link: https://lore.kernel.org/r/166876785552.222254.4403222906022558715.stgit@warthog.procyon.org.uk/
fs/afs/dir.c
fs/afs/file.c
fs/afs/write.c