Fix afs_launder_page() to set the starting position of the StoreData RPC at
the offset into the page at which the modified data starts instead of at
the beginning of the page (the iov_iter is correctly offset).

The offset got lost during the conversion to passing an iov_iter into
afs_store_data().

Changes:
ver #2:
 - Use page_offset() rather than manually calculating it[1].

Fixes: bd80d8a80e12 ("afs: Use ITER_XARRAY for writing")
Signed-off-by: David Howells <dhowe...@redhat.com>
Reviewed-by: Jeffrey Altman <jalt...@auristor.com>
cc: linux-...@lists.infradead.org
Link: https://lore.kernel.org/r/YST/0e92odsh0...@casper.infradead.org/ [1]
Link: 
https://lore.kernel.org/r/162880783179.3421678.7795105718190440134.st...@warthog.procyon.org.uk/
Link: 
https://lore.kernel.org/r/162937512409.1449272.18441473411207824084.st...@warthog.procyon.org.uk/
Link: 
https://lore.kernel.org/r/162981148752.1901565.3663780601682206026.st...@warthog.procyon.org.uk/
---

 fs/afs/write.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/afs/write.c b/fs/afs/write.c
index fb7d5c1cabde..5c977deeeee0 100644
--- a/fs/afs/write.c
+++ b/fs/afs/write.c
@@ -950,8 +950,7 @@ int afs_launder_page(struct page *page)
                iov_iter_bvec(&iter, WRITE, bv, 1, bv[0].bv_len);
 
                trace_afs_page_dirty(vnode, tracepoint_string("launder"), page);
-               ret = afs_store_data(vnode, &iter, (loff_t)page->index * 
PAGE_SIZE,
-                                    true);
+               ret = afs_store_data(vnode, &iter, page_offset(page) + f, true);
        }
 
        trace_afs_page_dirty(vnode, tracepoint_string("laundered"), page);


--
Linux-cachefs mailing list
Linux-cachefs@redhat.com
https://listman.redhat.com/mailman/listinfo/linux-cachefs

Reply via email to