splice: Convert page_cache_pipe_buf_confirm() to use a folio

Convert buf->page to a folio once instead of five times.  There's only
one uptodate bit per folio, not per page, so we lose nothing here.

Signed-off-by: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Message-Id: <20230821141541.2535953-1-willy@infradead.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
Matthew Wilcox (Oracle) 2023-08-21 15:15:41 +01:00 committed by Christian Brauner
parent 5522d9f7b2
commit 781ca6027e
1 changed files with 9 additions and 11 deletions

View File

@ -120,17 +120,17 @@ static void page_cache_pipe_buf_release(struct pipe_inode_info *pipe,
static int page_cache_pipe_buf_confirm(struct pipe_inode_info *pipe,
struct pipe_buffer *buf)
{
struct page *page = buf->page;
struct folio *folio = page_folio(buf->page);
int err;
if (!PageUptodate(page)) {
lock_page(page);
if (!folio_test_uptodate(folio)) {
folio_lock(folio);
/*
* Page got truncated/unhashed. This will cause a 0-byte
* Folio got truncated/unhashed. This will cause a 0-byte
* splice, if this is the first page.
*/
if (!page->mapping) {
if (!folio->mapping) {
err = -ENODATA;
goto error;
}
@ -138,20 +138,18 @@ static int page_cache_pipe_buf_confirm(struct pipe_inode_info *pipe,
/*
* Uh oh, read-error from disk.
*/
if (!PageUptodate(page)) {
if (!folio_test_uptodate(folio)) {
err = -EIO;
goto error;
}
/*
* Page is ok afterall, we are done.
*/
unlock_page(page);
/* Folio is ok after all, we are done */
folio_unlock(folio);
}
return 0;
error:
unlock_page(page);
folio_unlock(folio);
return err;
}