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:
parent
5522d9f7b2
commit
781ca6027e
20
fs/splice.c
20
fs/splice.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue