From: Greg Ungerer <gregungerer@westnet.com.au>
To: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
Christian Brauner <brauner@kernel.org>
Cc: linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 12/16] romfs: Convert romfs_read_folio() to use a folio
Date: Mon, 12 Aug 2024 11:46:34 +1000 [thread overview]
Message-ID: <597dd1bb-43ee-4531-8869-c46b38df56bd@westnet.com.au> (raw)
In-Reply-To: <20240530202110.2653630-13-willy@infradead.org>
Hi Mathew,
On 31/5/24 06:21, Matthew Wilcox (Oracle) wrote:
> 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>
This is breaking for me on my m68k/ColdFire 5475 target. That is a full
MMU CPU. The usual test build I do (m5475evb_defconfig) fails to boot,
not being able to load and start init or sh at startup from a ROMfs
resident in RAM within the uclinux MTD mapper:
...
Freeing unused kernel image (initmem) memory: 80K
This architecture does not have kernel memory protection.
Run /sbin/init as init process
Run /etc/init as init process
Run /bin/init as init process
Starting init: /bin/init exists but couldn't execute it (error -13)
Run /bin/sh as init process
Starting init: /bin/sh exists but couldn't execute it (error -13)
Kernel panic - not syncing: No working init found. Try passing init= option to
kernel. See Linux Documentation/admin-guide/init.rst for guidance.
CPU: 0 UID: 0 PID: 1 Comm: swapper Not tainted 6.11.0-rc3 #4
Stack from 00829f74:
00829f74 003d8508 003d8508 00000000 0000000a 00000003 0032b864 003d8508
00325126 00000001 00002700 00000003 00829fb0 00324e9e 00000000 00000000
00000000 0032ba9a 003ce1bd 0032b9b8 000218a4 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00002000 00000000
Call Trace: [<0032b864>] dump_stack+0xc/0x10
[<00325126>] panic+0xca/0x236
[<00324e9e>] try_to_run_init_process+0x0/0x36
[<0032ba9a>] kernel_init+0xe2/0xe8
[<0032b9b8>] kernel_init+0x0/0xe8
[<000218a4>] ret_from_kernel_thread+0xc/0x14
Reverting this change gets it going again.
Any idea what might be going on?
Regards
Greg
> ---
> fs/romfs/super.c | 22 ++++++----------------
> 1 file changed, 6 insertions(+), 16 deletions(-)
>
> diff --git a/fs/romfs/super.c b/fs/romfs/super.c
> index 2cbb92462074..68758b6fed94 100644
> --- a/fs/romfs/super.c
> +++ b/fs/romfs/super.c
> @@ -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;
> }
>
next prev parent reply other threads:[~2024-08-12 2:16 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-30 20:20 [PATCH 00/16] Prepare to remove PG_error Matthew Wilcox (Oracle)
2024-05-30 20:20 ` [PATCH 01/16] befs: Convert befs_symlink_read_folio() to use folio_end_read() Matthew Wilcox (Oracle)
2024-05-30 20:20 ` [PATCH 02/16] coda: Convert coda_symlink_filler() " Matthew Wilcox (Oracle)
2024-05-30 20:20 ` [PATCH 03/16] cramfs: Convert cramfs_read_folio to use a folio Matthew Wilcox (Oracle)
2024-05-30 20:20 ` [PATCH 04/16] efs: Convert efs_symlink_read_folio " Matthew Wilcox (Oracle)
2024-05-30 20:20 ` [PATCH 05/16] hpfs: Convert hpfs_symlink_read_folio " Matthew Wilcox (Oracle)
2024-05-30 20:20 ` [PATCH 06/16] isofs: Convert rock_ridge_symlink_read_folio " Matthew Wilcox (Oracle)
2024-05-30 20:20 ` [PATCH 07/16] hostfs: Convert hostfs_read_folio() " Matthew Wilcox (Oracle)
2024-05-30 20:21 ` [PATCH 08/16] jffs2: Remove calls to set/clear the folio error flag Matthew Wilcox (Oracle)
2024-05-30 20:21 ` [PATCH 09/16] nfs: Remove calls to folio_set_error Matthew Wilcox (Oracle)
2024-05-30 20:21 ` [PATCH 10/16] orangefs: Remove calls to set/clear the error flag Matthew Wilcox (Oracle)
2024-05-30 20:21 ` [PATCH 11/16] reiserfs: Remove call to folio_set_error() Matthew Wilcox (Oracle)
2024-05-30 20:21 ` [PATCH 12/16] romfs: Convert romfs_read_folio() to use a folio Matthew Wilcox (Oracle)
2024-08-12 1:46 ` Greg Ungerer [this message]
2024-08-12 3:30 ` Matthew Wilcox
2024-08-12 4:36 ` Greg Ungerer
2024-08-14 19:32 ` Matthew Wilcox
2024-08-15 12:42 ` Christian Brauner
2024-08-26 1:34 ` Greg Ungerer
2024-08-26 10:42 ` Christian Brauner
2024-05-30 20:21 ` [PATCH 13/16] ufs: Remove call to set the folio error flag Matthew Wilcox (Oracle)
2024-05-30 20:21 ` [PATCH 14/16] vboxsf: Convert vboxsf_read_folio() to use a folio Matthew Wilcox (Oracle)
2024-05-30 20:21 ` [PATCH 15/16] iomap: Remove calls to set and clear folio error flag Matthew Wilcox (Oracle)
2024-05-30 20:21 ` [PATCH 16/16] buffer: Remove calls to set and clear the " Matthew Wilcox (Oracle)
2024-05-31 10:34 ` [PATCH 00/16] Prepare to remove PG_error Christian Brauner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=597dd1bb-43ee-4531-8869-c46b38df56bd@westnet.com.au \
--to=gregungerer@westnet.com.au \
--cc=brauner@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).