diff options
author | David Howells <dhowells@redhat.com> | 2020-02-06 15:22:30 +0100 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2022-01-07 14:44:52 +0100 |
commit | c7f75ef33b6dcd4269d0f6ee8c50221ee3390733 (patch) | |
tree | 2f604c5cc0acbe83a10271054fd1d8c4662df50e /fs/afs/file.c | |
parent | afs: Convert afs to use the new fscache API (diff) | |
download | linux-c7f75ef33b6dcd4269d0f6ee8c50221ee3390733.tar.xz linux-c7f75ef33b6dcd4269d0f6ee8c50221ee3390733.zip |
afs: Copy local writes to the cache when writing to the server
When writing to the server from afs_writepage() or afs_writepages(), copy
the data to the cache object too.
To make this possible, the cookie must have its active users count
incremented when the page is dirtied and kept incremented until we manage
to clean up all the pages. This allows the writeback to take place after
the last file struct is released.
Signed-off-by: David Howells <dhowells@redhat.com>
Tested-by: kafs-testing@auristor.com
Acked-by: Jeff Layton <jlayton@kernel.org>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
cc: linux-cachefs@redhat.com
Link: https://lore.kernel.org/r/163819662333.215744.7531373404219224438.stgit@warthog.procyon.org.uk/ # v1
Link: https://lore.kernel.org/r/163906970998.143852.674420788614608063.stgit@warthog.procyon.org.uk/ # v2
Link: https://lore.kernel.org/r/163967176564.1823006.16666056085593949570.stgit@warthog.procyon.org.uk/ # v3
Link: https://lore.kernel.org/r/164021570208.640689.9193494979708031862.stgit@warthog.procyon.org.uk/ # v4
Diffstat (limited to 'fs/afs/file.c')
-rw-r--r-- | fs/afs/file.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/afs/file.c b/fs/afs/file.c index be23635f35b8..572063dad0b3 100644 --- a/fs/afs/file.c +++ b/fs/afs/file.c @@ -416,6 +416,12 @@ static void afs_readahead(struct readahead_control *ractl) netfs_readahead(ractl, &afs_req_ops, NULL); } +int afs_write_inode(struct inode *inode, struct writeback_control *wbc) +{ + fscache_unpin_writeback(wbc, afs_vnode_cache(AFS_FS_I(inode))); + return 0; +} + /* * Adjust the dirty region of the page on truncation or full invalidation, * getting rid of the markers altogether if the region is entirely invalidated. |