diff mbox series

[1/6] afs: Fix afs_launder_page() to set correct start file position

Message ID 162981148752.1901565.3663780601682206026.stgit@warthog.procyon.org.uk
State New
Headers show
Series netfs, afs, ceph: Support folios, at least partially | expand

Commit Message

David Howells Aug. 24, 2021, 1:24 p.m. UTC
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().

Fixes: bd80d8a80e12 ("afs: Use ITER_XARRAY for writing")
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
cc: linux-afs@lists.infradead.org
Link: https://lore.kernel.org/r/162880783179.3421678.7795105718190440134.stgit@warthog.procyon.org.uk/
---

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

Comments

Christoph Hellwig Aug. 24, 2021, 2:18 p.m. UTC | #1
On Tue, Aug 24, 2021 at 02:24:47PM +0100, David Howells wrote:
> +		ret = afs_store_data(vnode, &iter,
> +				     (loff_t)page->index * PAGE_SIZE + f, true);

You probably want to use page_offset() here:

		ret = afs_store_data(vnode, &iter, page_offset(page) + f, true);
Matthew Wilcox Aug. 24, 2021, 2:18 p.m. UTC | #2
On Tue, Aug 24, 2021 at 02:24:47PM +0100, David Howells wrote:
> +++ b/fs/afs/write.c
> @@ -950,8 +950,8 @@ 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,
> +				     (loff_t)page->index * PAGE_SIZE + f, true);

This could be page_offset(page), which reads better to me:

		ret = afs_store_data(vnode, &iter, page_offset(page) + f, true);
David Howells Aug. 24, 2021, 2:38 p.m. UTC | #3
Matthew Wilcox <willy@infradead.org> wrote:

> 
> This could be page_offset(page), which reads better to me:
> 
> 		ret = afs_store_data(vnode, &iter, page_offset(page) + f, true);

True.  It gets converted to folio_pos() in patch #5 - will that do?

David
diff mbox series

Patch

diff --git a/fs/afs/write.c b/fs/afs/write.c
index fb7d5c1cabde..fff4c7d88e0d 100644
--- a/fs/afs/write.c
+++ b/fs/afs/write.c
@@ -950,8 +950,8 @@  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,
+				     (loff_t)page->index * PAGE_SIZE + f, true);
 	}
 
 	trace_afs_page_dirty(vnode, tracepoint_string("laundered"), page);