mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-27 12:04:22 +08:00
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: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20230531125535.676098-9-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
a6a41d39c2
commit
c8643c72bc
@ -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 @@ out:
|
||||
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 @@ retry:
|
||||
* 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);
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user