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

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.deSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent a6a41d39
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include "do_mounts.h" #include "do_mounts.h"
int root_mountflags = MS_RDONLY | MS_SILENT; int root_mountflags = MS_RDONLY | MS_SILENT;
static char * __initdata root_device_name;
static char __initdata saved_root_name[64]; static char __initdata saved_root_name[64];
static int root_wait; static int root_wait;
...@@ -391,7 +390,7 @@ static int __init do_mount_root(const char *name, const char *fs, ...@@ -391,7 +390,7 @@ static int __init do_mount_root(const char *name, const char *fs,
return ret; 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); struct page *page = alloc_page(GFP_KERNEL);
char *fs_names = page_address(page); char *fs_names = page_address(page);
...@@ -425,7 +424,7 @@ void __init mount_root_generic(char *name, int flags) ...@@ -425,7 +424,7 @@ void __init mount_root_generic(char *name, int flags)
* and give them a list of the available devices * and give them a list of the available devices
*/ */
printk("VFS: Cannot open root device \"%s\" or %s: error %d\n", 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("Please append a correct \"root=\" boot option; here are the available partitions:\n");
printk_all_partitions(); printk_all_partitions();
...@@ -541,7 +540,7 @@ static bool __init fs_is_nodev(char *fstype) ...@@ -541,7 +540,7 @@ static bool __init fs_is_nodev(char *fstype)
return ret; return ret;
} }
static int __init mount_nodev_root(void) static int __init mount_nodev_root(char *root_device_name)
{ {
char *fs_names, *fstype; char *fs_names, *fstype;
int err = -EINVAL; int err = -EINVAL;
...@@ -569,21 +568,21 @@ static int __init mount_nodev_root(void) ...@@ -569,21 +568,21 @@ static int __init mount_nodev_root(void)
} }
#ifdef CONFIG_BLOCK #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); int err = create_dev("/dev/root", ROOT_DEV);
if (err < 0) if (err < 0)
pr_emerg("Failed to create /dev/root: %d\n", err); 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 #else
static inline void mount_block_root(void) static inline void mount_block_root(char *root_device_name)
{ {
} }
#endif /* CONFIG_BLOCK */ #endif /* CONFIG_BLOCK */
void __init mount_root(void) void __init mount_root(char *root_device_name)
{ {
switch (ROOT_DEV) { switch (ROOT_DEV) {
case Root_NFS: case Root_NFS:
...@@ -593,11 +592,12 @@ void __init mount_root(void) ...@@ -593,11 +592,12 @@ void __init mount_root(void)
mount_cifs_root(); mount_cifs_root();
break; break;
case 0: 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; break;
fallthrough; fallthrough;
default: default:
mount_block_root(); mount_block_root(root_device_name);
break; break;
} }
} }
...@@ -607,6 +607,8 @@ void __init mount_root(void) ...@@ -607,6 +607,8 @@ void __init mount_root(void)
*/ */
void __init prepare_namespace(void) void __init prepare_namespace(void)
{ {
char *root_device_name;
if (root_delay) { if (root_delay) {
printk(KERN_INFO "Waiting %d sec before mounting root device...\n", printk(KERN_INFO "Waiting %d sec before mounting root device...\n",
root_delay); root_delay);
...@@ -628,7 +630,8 @@ void __init prepare_namespace(void) ...@@ -628,7 +630,8 @@ void __init prepare_namespace(void)
root_device_name = saved_root_name; root_device_name = saved_root_name;
if (!strncmp(root_device_name, "mtd", 3) || if (!strncmp(root_device_name, "mtd", 3) ||
!strncmp(root_device_name, "ubi", 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; goto out;
} }
ROOT_DEV = name_to_dev_t(root_device_name); ROOT_DEV = name_to_dev_t(root_device_name);
...@@ -636,7 +639,7 @@ void __init prepare_namespace(void) ...@@ -636,7 +639,7 @@ void __init prepare_namespace(void)
root_device_name += 5; root_device_name += 5;
} }
if (initrd_load()) if (initrd_load(root_device_name))
goto out; goto out;
/* wait for any asynchronous scanning to complete */ /* wait for any asynchronous scanning to complete */
...@@ -649,7 +652,7 @@ void __init prepare_namespace(void) ...@@ -649,7 +652,7 @@ void __init prepare_namespace(void)
async_synchronize_full(); async_synchronize_full();
} }
mount_root(); mount_root(root_device_name);
out: out:
devtmpfs_mount(); devtmpfs_mount();
init_mount(".", "/", NULL, MS_MOVE, NULL); init_mount(".", "/", NULL, MS_MOVE, NULL);
......
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/init_syscalls.h> #include <linux/init_syscalls.h>
void mount_root_generic(char *name, int flags); void mount_root_generic(char *name, char *pretty_name, int flags);
void mount_root(void); void mount_root(char *root_device_name);
extern int root_mountflags; extern int root_mountflags;
static inline __init int create_dev(char *name, dev_t dev) 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; } ...@@ -33,11 +33,11 @@ static inline int rd_load_image(char *from) { return 0; }
#endif #endif
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
bool __init initrd_load(char *root_device_name);
bool __init initrd_load(void);
#else #else
static inline bool initrd_load(char *root_device_name)
static inline bool initrd_load(void) { return false; } {
return false;
}
#endif #endif
...@@ -83,7 +83,7 @@ static int __init init_linuxrc(struct subprocess_info *info, struct cred *new) ...@@ -83,7 +83,7 @@ static int __init init_linuxrc(struct subprocess_info *info, struct cred *new)
return 0; return 0;
} }
static void __init handle_initrd(void) static void __init handle_initrd(char *root_device_name)
{ {
struct subprocess_info *info; struct subprocess_info *info;
static char *argv[] = { "linuxrc", NULL, }; static char *argv[] = { "linuxrc", NULL, };
...@@ -95,7 +95,8 @@ static void __init handle_initrd(void) ...@@ -95,7 +95,8 @@ static void __init handle_initrd(void)
real_root_dev = new_encode_dev(ROOT_DEV); real_root_dev = new_encode_dev(ROOT_DEV);
create_dev("/dev/root.old", Root_RAM0); create_dev("/dev/root.old", Root_RAM0);
/* mount initrd on rootfs' /root */ /* 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_mkdir("/old", 0700);
init_chdir("/old"); init_chdir("/old");
...@@ -117,7 +118,7 @@ static void __init handle_initrd(void) ...@@ -117,7 +118,7 @@ static void __init handle_initrd(void)
init_chdir("/"); init_chdir("/");
ROOT_DEV = new_decode_dev(real_root_dev); 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 ... "); printk(KERN_NOTICE "Trying to move old root to /initrd ... ");
error = init_mount("/old", "/root/initrd", NULL, MS_MOVE, NULL); error = init_mount("/old", "/root/initrd", NULL, MS_MOVE, NULL);
...@@ -133,7 +134,7 @@ static void __init handle_initrd(void) ...@@ -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) { if (mount_initrd) {
create_dev("/dev/ram", Root_RAM0); create_dev("/dev/ram", Root_RAM0);
...@@ -145,7 +146,7 @@ bool __init initrd_load(void) ...@@ -145,7 +146,7 @@ bool __init initrd_load(void)
*/ */
if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0) { if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0) {
init_unlink("/initrd.image"); init_unlink("/initrd.image");
handle_initrd(); handle_initrd(root_device_name);
return true; return true;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment