From 9a18df7a71bfa620b1278777d64783a359d7eb4e Mon Sep 17 00:00:00 2001
From: Thorsten Glaser <tg@mirbsd.org>
Date: Sun, 4 May 2014 01:37:54 +0200
Subject: [PATCH] mount tmpfs-as-rootfs (initramfs) with -o
 nr_blocks=0,nr_inodes=0

I would have preferred to write this patch to be able to pass
rootflags=nr_blocks=0,nr_inodes=0 on the kernel command line,
and then hand these rootflags over to the initramfs (tmpfs)
mount in the same way the kernel hands them over to the block
device rootfs mount. But at least the Debian/m68k initrd also
parses $rootflags from the environment and adds it to the call
to the user-space mount for the eventual root device, which
would make the kernel command line rootflags option be used in
both places (tmpfs and e.g. ext4) which is guaranteed to error
out in at least one of them.

This change is intended to aid people in a setup where the
initrd is the final root filesystem, i.e. not mounted over.
This is especially useful in automated tests running on qemu
for boards with constrained memory (e.g. 64 MiB on sh4).

Considering that the initramfs is normally emptied out then
overmounted, this change is probably safe for setups where
initramfs just hosts early userspace, too, since the tmpfs
backing it is not accessible any more later on, AFAICT.

Signed-off-by: Thorsten Glaser <tg@mirbsd.org>
---
 init/do_mounts.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/init/do_mounts.c b/init/do_mounts.c
index 82f2288..55a4cfe 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -594,6 +594,7 @@ out:
 }
 
 static bool is_tmpfs;
+static char tmpfs_rootflags[] = "nr_blocks=0,nr_inodes=0";
 static struct dentry *rootfs_mount(struct file_system_type *fs_type,
 	int flags, const char *dev_name, void *data)
 {
@@ -606,6 +607,9 @@ static struct dentry *rootfs_mount(struct file_system_type *fs_type,
 	if (IS_ENABLED(CONFIG_TMPFS) && is_tmpfs)
 		fill = shmem_fill_super;
 
+	if (is_tmpfs)
+		data = tmpfs_rootflags;
+
 	return mount_nodev(fs_type, flags, data, fill);
 }
 
-- 
2.0.0.rc0

