Commit c8643c72 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

init: pass root_device_name explicitly



Instead of declaring root_device_name as a global variable pass it as an
argument to the functions using it.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20230531125535.676098-9-hch@lst.de


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent a6a41d39
Loading
Loading
Loading
Loading
+16 −13
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@
#include "do_mounts.h"

int root_mountflags = MS_RDONLY | MS_SILENT;
static char * __initdata root_device_name;
static char __initdata saved_root_name[64];
static int root_wait;

@@ -391,7 +390,7 @@ static int __init do_mount_root(const char *name, const char *fs,
	return ret;
}

void __init mount_root_generic(char *name, int flags)
void __init mount_root_generic(char *name, char *pretty_name, int flags)
{
	struct page *page = alloc_page(GFP_KERNEL);
	char *fs_names = page_address(page);
@@ -425,7 +424,7 @@ void __init mount_root_generic(char *name, int flags)
		 * and give them a list of the available devices
		 */
		printk("VFS: Cannot open root device \"%s\" or %s: error %d\n",
				root_device_name, b, err);
				pretty_name, b, err);
		printk("Please append a correct \"root=\" boot option; here are the available partitions:\n");

		printk_all_partitions();
@@ -541,7 +540,7 @@ static bool __init fs_is_nodev(char *fstype)
	return ret;
}

static int __init mount_nodev_root(void)
static int __init mount_nodev_root(char *root_device_name)
{
	char *fs_names, *fstype;
	int err = -EINVAL;
@@ -569,21 +568,21 @@ static int __init mount_nodev_root(void)
}

#ifdef CONFIG_BLOCK
static void __init mount_block_root(void)
static void __init mount_block_root(char *root_device_name)
{
	int err = create_dev("/dev/root", ROOT_DEV);

	if (err < 0)
		pr_emerg("Failed to create /dev/root: %d\n", err);
	mount_root_generic("/dev/root", root_mountflags);
	mount_root_generic("/dev/root", root_device_name, root_mountflags);
}
#else
static inline void mount_block_root(void)
static inline void mount_block_root(char *root_device_name)
{
}
#endif /* CONFIG_BLOCK */

void __init mount_root(void)
void __init mount_root(char *root_device_name)
{
	switch (ROOT_DEV) {
	case Root_NFS:
@@ -593,11 +592,12 @@ void __init mount_root(void)
		mount_cifs_root();
		break;
	case 0:
		if (root_device_name && root_fs_names && mount_nodev_root() == 0)
		if (root_device_name && root_fs_names &&
		    mount_nodev_root(root_device_name) == 0)
			break;
		fallthrough;
	default:
		mount_block_root();
		mount_block_root(root_device_name);
		break;
	}
}
@@ -607,6 +607,8 @@ void __init mount_root(void)
 */
void __init prepare_namespace(void)
{
	char *root_device_name;

	if (root_delay) {
		printk(KERN_INFO "Waiting %d sec before mounting root device...\n",
		       root_delay);
@@ -628,7 +630,8 @@ void __init prepare_namespace(void)
		root_device_name = saved_root_name;
		if (!strncmp(root_device_name, "mtd", 3) ||
		    !strncmp(root_device_name, "ubi", 3)) {
			mount_root_generic(root_device_name, root_mountflags);
			mount_root_generic(root_device_name, root_device_name,
					   root_mountflags);
			goto out;
		}
		ROOT_DEV = name_to_dev_t(root_device_name);
@@ -636,7 +639,7 @@ void __init prepare_namespace(void)
			root_device_name += 5;
	}

	if (initrd_load())
	if (initrd_load(root_device_name))
		goto out;

	/* wait for any asynchronous scanning to complete */
@@ -649,7 +652,7 @@ void __init prepare_namespace(void)
		async_synchronize_full();
	}

	mount_root();
	mount_root(root_device_name);
out:
	devtmpfs_mount();
	init_mount(".", "/", NULL, MS_MOVE, NULL);
+7 −7
Original line number Diff line number Diff line
@@ -10,8 +10,8 @@
#include <linux/root_dev.h>
#include <linux/init_syscalls.h>

void  mount_root_generic(char *name, int flags);
void  mount_root(void);
void  mount_root_generic(char *name, char *pretty_name, int flags);
void  mount_root(char *root_device_name);
extern int root_mountflags;

static inline __init int create_dev(char *name, dev_t dev)
@@ -33,11 +33,11 @@ static inline int rd_load_image(char *from) { return 0; }
#endif

#ifdef CONFIG_BLK_DEV_INITRD

bool __init initrd_load(void);

bool __init initrd_load(char *root_device_name);
#else

static inline bool initrd_load(void) { return false; }
static inline bool initrd_load(char *root_device_name)
{
	return false;
	}

#endif
+6 −5
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ static int __init init_linuxrc(struct subprocess_info *info, struct cred *new)
	return 0;
}

static void __init handle_initrd(void)
static void __init handle_initrd(char *root_device_name)
{
	struct subprocess_info *info;
	static char *argv[] = { "linuxrc", NULL, };
@@ -95,7 +95,8 @@ static void __init handle_initrd(void)
	real_root_dev = new_encode_dev(ROOT_DEV);
	create_dev("/dev/root.old", Root_RAM0);
	/* mount initrd on rootfs' /root */
	mount_root_generic("/dev/root.old", root_mountflags & ~MS_RDONLY);
	mount_root_generic("/dev/root.old", root_device_name,
			   root_mountflags & ~MS_RDONLY);
	init_mkdir("/old", 0700);
	init_chdir("/old");

@@ -117,7 +118,7 @@ static void __init handle_initrd(void)

	init_chdir("/");
	ROOT_DEV = new_decode_dev(real_root_dev);
	mount_root();
	mount_root(root_device_name);

	printk(KERN_NOTICE "Trying to move old root to /initrd ... ");
	error = init_mount("/old", "/root/initrd", NULL, MS_MOVE, NULL);
@@ -133,7 +134,7 @@ static void __init handle_initrd(void)
	}
}

bool __init initrd_load(void)
bool __init initrd_load(char *root_device_name)
{
	if (mount_initrd) {
		create_dev("/dev/ram", Root_RAM0);
@@ -145,7 +146,7 @@ bool __init initrd_load(void)
		 */
		if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0) {
			init_unlink("/initrd.image");
			handle_initrd();
			handle_initrd(root_device_name);
			return true;
		}
	}