diff options
author | Matthew Wilcox (Oracle) <willy@infradead.org> | 2024-05-30 21:20:59 +0100 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2024-05-31 12:31:40 +0200 |
commit | e3ec0fe944d243968c6f33305e5d195efb501c0b (patch) | |
tree | 2d9ae90d9fa9957d3914f73771e3d29a304eee8e /fs/hostfs | |
parent | 4df37c5f0882b211694598ff1fa1c69ccd0c1320 (diff) | |
download | linux-stable-e3ec0fe944d243968c6f33305e5d195efb501c0b.tar.gz linux-stable-e3ec0fe944d243968c6f33305e5d195efb501c0b.tar.bz2 linux-stable-e3ec0fe944d243968c6f33305e5d195efb501c0b.zip |
hostfs: Convert hostfs_read_folio() to use a folio
Remove the use of page APIs, including setting/clearing the error flag
which is never checked on hostfs folios. This does not include support
for large folios as kmap_local_folio() maps only one page at a time.
Cc: Richard Weinberger <richard@nod.at>
Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
Cc: Johannes Berg <johannes@sipsolutions.net>
Cc: linux-um@lists.infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Link: https://lore.kernel.org/r/20240530202110.2653630-8-willy@infradead.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'fs/hostfs')
-rw-r--r-- | fs/hostfs/hostfs_kern.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index a73d27c4dd58..e7c72f2634f6 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c @@ -432,31 +432,20 @@ static int hostfs_writepage(struct page *page, struct writeback_control *wbc) static int hostfs_read_folio(struct file *file, struct folio *folio) { - struct page *page = &folio->page; char *buffer; - loff_t start = page_offset(page); + loff_t start = folio_pos(folio); int bytes_read, ret = 0; - buffer = kmap_local_page(page); + buffer = kmap_local_folio(folio, 0); bytes_read = read_file(FILE_HOSTFS_I(file)->fd, &start, buffer, PAGE_SIZE); - if (bytes_read < 0) { - ClearPageUptodate(page); - SetPageError(page); + if (bytes_read < 0) ret = bytes_read; - goto out; - } - - memset(buffer + bytes_read, 0, PAGE_SIZE - bytes_read); - - ClearPageError(page); - SetPageUptodate(page); - - out: - flush_dcache_page(page); + else + buffer = folio_zero_tail(folio, bytes_read, buffer); kunmap_local(buffer); - unlock_page(page); + folio_end_read(folio, ret == 0); return ret; } |