mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 12:14:10 +08:00
romfs: Convert romfs_read_folio() to use a folio
Remove the conversion back to struct page and use the folio APIs instead of the page APIs. It's probably more trouble than it's worth to support large folios in romfs, so there are still PAGE_SIZE assumptions in this function. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Link: https://lore.kernel.org/r/20240530202110.2653630-13-willy@infradead.org Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
f4c51473d2
commit
d86f2de026
@ -101,19 +101,15 @@ static struct inode *romfs_iget(struct super_block *sb, unsigned long pos);
|
||||
*/
|
||||
static int romfs_read_folio(struct file *file, struct folio *folio)
|
||||
{
|
||||
struct page *page = &folio->page;
|
||||
struct inode *inode = page->mapping->host;
|
||||
struct inode *inode = folio->mapping->host;
|
||||
loff_t offset, size;
|
||||
unsigned long fillsize, pos;
|
||||
void *buf;
|
||||
int ret;
|
||||
|
||||
buf = kmap(page);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
buf = kmap_local_folio(folio, 0);
|
||||
|
||||
/* 32 bit warning -- but not for us :) */
|
||||
offset = page_offset(page);
|
||||
offset = folio_pos(folio);
|
||||
size = i_size_read(inode);
|
||||
fillsize = 0;
|
||||
ret = 0;
|
||||
@ -125,20 +121,14 @@ static int romfs_read_folio(struct file *file, struct folio *folio)
|
||||
|
||||
ret = romfs_dev_read(inode->i_sb, pos, buf, fillsize);
|
||||
if (ret < 0) {
|
||||
SetPageError(page);
|
||||
fillsize = 0;
|
||||
ret = -EIO;
|
||||
}
|
||||
}
|
||||
|
||||
if (fillsize < PAGE_SIZE)
|
||||
memset(buf + fillsize, 0, PAGE_SIZE - fillsize);
|
||||
if (ret == 0)
|
||||
SetPageUptodate(page);
|
||||
|
||||
flush_dcache_page(page);
|
||||
kunmap(page);
|
||||
unlock_page(page);
|
||||
buf = folio_zero_tail(folio, fillsize, buf);
|
||||
kunmap_local(buf);
|
||||
folio_end_read(folio, ret == 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user