]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
hostfs: Convert hostfs_read_folio() to use a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Thu, 30 May 2024 20:20:59 +0000 (21:20 +0100)
committerChristian Brauner <brauner@kernel.org>
Fri, 31 May 2024 10:31:40 +0000 (12:31 +0200)
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>
fs/hostfs/hostfs_kern.c

index a73d27c4dd583becba8b81ce9047113b53f5ea83..e7c72f2634f6f0dd1a837d5e6c5f93a6130dd9cd 100644 (file)
@@ -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;
 }