diff options
author | Matthew Wilcox (Oracle) <willy@infradead.org> | 2023-08-21 15:15:41 +0100 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2023-08-21 17:26:05 +0200 |
commit | 781ca6027ed7b83b97184a0606b703794da1e4be (patch) | |
tree | a2344b3b56c6fe60cbcfe80fa0e57e5524c01231 /fs/splice.c | |
parent | 5522d9f7b2e6d21dfa361cc498719b7f5e736b57 (diff) |
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>
Diffstat (limited to 'fs/splice.c')
-rw-r--r-- | fs/splice.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/fs/splice.c b/fs/splice.c index 378fedb392ae..fa4f51055e9f 100644 --- a/fs/splice.c +++ b/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; } |