[RFC] rootfs: Use tmpfs for rootfs even if root= is given

Message ID 20231031154417.621742-1-stefanb@linux.ibm.com
State New
Headers
Series [RFC] rootfs: Use tmpfs for rootfs even if root= is given |

Commit Message

Stefan Berger Oct. 31, 2023, 3:44 p.m. UTC
  rootfs currently does not use tmpfs if the root= boot option is passed
even though the documentation about rootfs (added in 6e19eded3684) in
Documentation/filesystems/ramfs-rootfs-initramfs.rst states:

  If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
  default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
  line.

However, this currently does not work when root= is passed on the boot
command line since then saved_root_name contains a string and prevents
usage of tmpfs. Therefore, remove the check on saved_root_name to
enable tmpfs for rootfs.

Fixes: 6e19eded3684 ("initmpfs: use initramfs if rootfstype= or root= specified")
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Cc: "Milton D. Miller II" <mdmii@outlook.com>
Cc: Rob Landley <rob@landley.net>
Cc: Jeff Layton <jlayton@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Jim Cromie <jim.cromie@gmail.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Mimi Zohar <zohar@linux.ibm.com>
---
 init/do_mounts.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Greg KH Oct. 31, 2023, 4:56 p.m. UTC | #1
On Tue, Oct 31, 2023 at 11:44:17AM -0400, Stefan Berger wrote:
> rootfs currently does not use tmpfs if the root= boot option is passed
> even though the documentation about rootfs (added in 6e19eded3684) in
> Documentation/filesystems/ramfs-rootfs-initramfs.rst states:
> 
>   If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
>   default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
>   line.

At this point in time, is there even any difference between ramfs and
tmpfs anymore?  Why would you want to choose one over the other here?

thanks,

greg k-h
  
H. Peter Anvin Oct. 31, 2023, 8:33 p.m. UTC | #2
On October 31, 2023 10:11:01 AM PDT, Stefan Berger <stefanb@linux.ibm.com> wrote:
>
>On 10/31/23 12:56, Greg Kroah-Hartman wrote:
>> On Tue, Oct 31, 2023 at 11:44:17AM -0400, Stefan Berger wrote:
>>> rootfs currently does not use tmpfs if the root= boot option is passed
>>> even though the documentation about rootfs (added in 6e19eded3684) in
>>> Documentation/filesystems/ramfs-rootfs-initramfs.rst states:
>>> 
>>>    If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
>>>    default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
>>>    line.
>> At this point in time, is there even any difference between ramfs and
>> tmpfs anymore?  Why would you want to choose one over the other here?
>
>CONFIG_TPMFS_XATTRS allows us to set xattrs, such as security.ima.
>
>   Stefan
>
>> 
>> thanks,
>> 
>> greg k-h
Why do we even keep ramfs as a standalone file system? To guarantee it cannot be swapped out? Does anyone actually use it?
  
Stefan Berger Oct. 31, 2023, 9:02 p.m. UTC | #3
On 10/31/23 16:33, H. Peter Anvin wrote:
> On October 31, 2023 10:11:01 AM PDT, Stefan Berger <stefanb@linux.ibm.com> wrote:
>>
>> On 10/31/23 12:56, Greg Kroah-Hartman wrote:
>>> On Tue, Oct 31, 2023 at 11:44:17AM -0400, Stefan Berger wrote:
>>>> rootfs currently does not use tmpfs if the root= boot option is passed
>>>> even though the documentation about rootfs (added in 6e19eded3684) in
>>>> Documentation/filesystems/ramfs-rootfs-initramfs.rst states:
>>>>
>>>>     If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
>>>>     default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
>>>>     line.
>>> At this point in time, is there even any difference between ramfs and
>>> tmpfs anymore?  Why would you want to choose one over the other here?
>>
>> CONFIG_TPMFS_XATTRS allows us to set xattrs, such as security.ima.
>>
>>     Stefan
>>
>>>
>>> thanks,
>>>
>>> greg k-h
> Why do we even keep ramfs as a standalone file system? To guarantee it cannot be swapped out? Does anyone actually use it?

Probably all machines that have root= on the boot command line use it...
  
Rob Landley Nov. 1, 2023, 11:35 a.m. UTC | #4
On 10/31/23 11:56, Greg Kroah-Hartman wrote:
> On Tue, Oct 31, 2023 at 11:44:17AM -0400, Stefan Berger wrote:
>> rootfs currently does not use tmpfs if the root= boot option is passed
>> even though the documentation about rootfs (added in 6e19eded3684) in
>> Documentation/filesystems/ramfs-rootfs-initramfs.rst states:
>> 
>>   If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
>>   default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
>>   line.
> 
> At this point in time, is there even any difference between ramfs and
> tmpfs anymore?  Why would you want to choose one over the other here?

I submitted a patch to fix this to the list multiple times, which got ignored as
always. Most recently here:

https://lore.kernel.org/lkml/8244c75f-445e-b15b-9dbf-266e7ca666e2@landley.net/

Rob
  
Stefan Berger Nov. 1, 2023, 12:11 p.m. UTC | #5
On 11/1/23 07:35, Rob Landley wrote:
> On 10/31/23 11:56, Greg Kroah-Hartman wrote:
>> On Tue, Oct 31, 2023 at 11:44:17AM -0400, Stefan Berger wrote:
>>> rootfs currently does not use tmpfs if the root= boot option is passed
>>> even though the documentation about rootfs (added in 6e19eded3684) in
>>> Documentation/filesystems/ramfs-rootfs-initramfs.rst states:
>>>
>>>    If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
>>>    default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
>>>    line.
>>
>> At this point in time, is there even any difference between ramfs and
>> tmpfs anymore?  Why would you want to choose one over the other here?
> 
> I submitted a patch to fix this to the list multiple times, which got ignored as
> always. Most recently here:
> 
> https://lore.kernel.org/lkml/8244c75f-445e-b15b-9dbf-266e7ca666e2@landley.net/

I just tried it with your patch and the machine I am using this with 
(OpenBMC) uses the boot command line 'console=ttyS4,115200n8 
root=/dev/ram rw'. When I append rootfstype=tmpfs to this boot command 
line then it starts actually using tmpfs. So I think this would work for me.
I can add my Tested-by tag to the patch if this helps to get it merged. 
Ideally it would also propagate back with a Fixes tag...

    Stefan

> 
> Rob
  
Stefan Berger Nov. 1, 2023, 2:16 p.m. UTC | #6
On 11/1/23 07:35, Rob Landley wrote:
> On 10/31/23 11:56, Greg Kroah-Hartman wrote:
>> On Tue, Oct 31, 2023 at 11:44:17AM -0400, Stefan Berger wrote:
>>> rootfs currently does not use tmpfs if the root= boot option is passed
>>> even though the documentation about rootfs (added in 6e19eded3684) in
>>> Documentation/filesystems/ramfs-rootfs-initramfs.rst states:
>>>
>>>    If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
>>>    default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
>>>    line.
>>
>> At this point in time, is there even any difference between ramfs and
>> tmpfs anymore?  Why would you want to choose one over the other here?
> 
> I submitted a patch to fix this to the list multiple times, which got ignored as
> always. Most recently here:
> 
> https://lore.kernel.org/lkml/8244c75f-445e-b15b-9dbf-266e7ca666e2@landley.net/

Everyone,
I now responded to Rob's patch over here: 
https://lkml.org/lkml/2023/11/1/333


> 
> Rob
  
Greg KH Nov. 1, 2023, 2:28 p.m. UTC | #7
On Wed, Nov 01, 2023 at 10:16:37AM -0400, Stefan Berger wrote:
> 
> 
> On 11/1/23 07:35, Rob Landley wrote:
> > On 10/31/23 11:56, Greg Kroah-Hartman wrote:
> > > On Tue, Oct 31, 2023 at 11:44:17AM -0400, Stefan Berger wrote:
> > > > rootfs currently does not use tmpfs if the root= boot option is passed
> > > > even though the documentation about rootfs (added in 6e19eded3684) in
> > > > Documentation/filesystems/ramfs-rootfs-initramfs.rst states:
> > > > 
> > > >    If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
> > > >    default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
> > > >    line.
> > > 
> > > At this point in time, is there even any difference between ramfs and
> > > tmpfs anymore?  Why would you want to choose one over the other here?
> > 
> > I submitted a patch to fix this to the list multiple times, which got ignored as
> > always. Most recently here:
> > 
> > https://lore.kernel.org/lkml/8244c75f-445e-b15b-9dbf-266e7ca666e2@landley.net/
> 
> Everyone,
> I now responded to Rob's patch over here:
> https://lkml.org/lkml/2023/11/1/333

Note, we can't do anything with lkml.org links, they don't even work at
times, please always use lore.kernel.org

Also, one patch out of a longer series also will not work as we can't
pick it up from there either.

Can someone resend it, as a stand-alone patch, with the proper people
 cc:ed and then we can handle that.  You all know this...

 thanks,

 greg k-h

> 
> 
> > 
> > Rob
  
Mimi Zohar Nov. 1, 2023, 2:31 p.m. UTC | #8
On Wed, 2023-11-01 at 15:28 +0100, Greg Kroah-Hartman wrote:
> On Wed, Nov 01, 2023 at 10:16:37AM -0400, Stefan Berger wrote:
> > 
> > 
> > On 11/1/23 07:35, Rob Landley wrote:
> > > On 10/31/23 11:56, Greg Kroah-Hartman wrote:
> > > > On Tue, Oct 31, 2023 at 11:44:17AM -0400, Stefan Berger wrote:
> > > > > rootfs currently does not use tmpfs if the root= boot option is passed
> > > > > even though the documentation about rootfs (added in 6e19eded3684) in
> > > > > Documentation/filesystems/ramfs-rootfs-initramfs.rst states:
> > > > > 
> > > > >    If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
> > > > >    default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
> > > > >    line.
> > > > 
> > > > At this point in time, is there even any difference between ramfs and
> > > > tmpfs anymore?  Why would you want to choose one over the other here?
> > > 
> > > I submitted a patch to fix this to the list multiple times, which got ignored as
> > > always. Most recently here:
> > > 
> > > https://lore.kernel.org/lkml/8244c75f-445e-b15b-9dbf-266e7ca666e2@landley.net/
> > 
> > Everyone,
> > I now responded to Rob's patch over here:
> > https://lkml.org/lkml/2023/11/1/333
> 
> Note, we can't do anything with lkml.org links, they don't even work at
> times, please always use lore.kernel.org
> 
> Also, one patch out of a longer series also will not work as we can't
> pick it up from there either.
> 
> Can someone resend it, as a stand-alone patch, with the proper people
>  cc:ed and then we can handle that.  You all know this...

The initramfs@vger.kernel.org mailing list should be Cc'ed as well.
  
Rob Landley Nov. 1, 2023, 2:48 p.m. UTC | #9
On 11/1/23 07:11, Stefan Berger wrote:
> On 11/1/23 07:35, Rob Landley wrote:
>> On 10/31/23 11:56, Greg Kroah-Hartman wrote:
>>> On Tue, Oct 31, 2023 at 11:44:17AM -0400, Stefan Berger wrote:
>>>> rootfs currently does not use tmpfs if the root= boot option is passed
>>>> even though the documentation about rootfs (added in 6e19eded3684) in
>>>> Documentation/filesystems/ramfs-rootfs-initramfs.rst states:
>>>>
>>>>    If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
>>>>    default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
>>>>    line.
>>>
>>> At this point in time, is there even any difference between ramfs and
>>> tmpfs anymore?  Why would you want to choose one over the other here?
>> 
>> I submitted a patch to fix this to the list multiple times, which got ignored as
>> always. Most recently here:
>> 
>> https://lore.kernel.org/lkml/8244c75f-445e-b15b-9dbf-266e7ca666e2@landley.net/
> 
> I just tried it with your patch and the machine I am using this with 
> (OpenBMC) uses the boot command line 'console=ttyS4,115200n8 
> root=/dev/ram rw'. When I append rootfstype=tmpfs to this boot command 
> line then it starts actually using tmpfs. So I think this would work for me.
> I can add my Tested-by tag to the patch if this helps to get it merged. 
> Ideally it would also propagate back with a Fixes tag...

Regarding the "why ramfs" question, one bug report I periodically get is people
using initramfs.cpio.gz that works on ramfs but fails to extract when they try
tmpfs, and the reason is tmpfs defaults to size=50% of memory and their archive
extracts to more than that. Since ramfs hasn't got a limit, it extracted and ran
fine (generally a dedicated init app doing its IoT thing) and so far they've
always gone back to ramfs as their fix.

I vaguely recall I had some todo item to let them supply arguments so they could
specify their own size= for initmpfs (ramfs doesn't take any so it hadn't been
wired up last time I looked), but somewhere between
https://lkml.org/lkml/2016/6/22/686 and
https://lkml.iu.edu/hypermail/linux/kernel/2302.2/05597.html still being out of
tree 7 years later I kind of lost interest...

Rob
  
Mimi Zohar Nov. 2, 2023, 11:56 a.m. UTC | #10
On Wed, 2023-11-01 at 06:35 -0500, Rob Landley wrote:
> On 10/31/23 11:56, Greg Kroah-Hartman wrote:
> > On Tue, Oct 31, 2023 at 11:44:17AM -0400, Stefan Berger wrote:
> >> rootfs currently does not use tmpfs if the root= boot option is passed
> >> even though the documentation about rootfs (added in 6e19eded3684) in
> >> Documentation/filesystems/ramfs-rootfs-initramfs.rst states:
> >> 
> >>   If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
> >>   default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
> >>   line.
> > 
> > At this point in time, is there even any difference between ramfs and
> > tmpfs anymore?  Why would you want to choose one over the other here?
> 
> I submitted a patch to fix this to the list multiple times, which got ignored as
> always. Most recently here:
> 
> https://lore.kernel.org/lkml/8244c75f-445e-b15b-9dbf-266e7ca666e2@landley.net/

Rob, the patch set wasn't upstreamed, but it certainly wasn't ignored. 
There were multiple comments.

Can you at least re-post "[PATCH 5/5] fix rootfstype=tmpfs" after
addressing the checkpatch.pl complaints?
  

Patch

diff --git a/init/do_mounts.c b/init/do_mounts.c
index 5dfd30b13f48..6567cf5807ee 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -510,7 +510,7 @@  struct file_system_type rootfs_fs_type = {
 
 void __init init_rootfs(void)
 {
-	if (IS_ENABLED(CONFIG_TMPFS) && !saved_root_name[0] &&
+	if (IS_ENABLED(CONFIG_TMPFS) &&
 		(!root_fs_names || strstr(root_fs_names, "tmpfs")))
 		is_tmpfs = true;
 }