mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:24:47 +01:00
vfs-7.0-rc1.initrd
Please consider pulling these changes from the signed vfs-7.0-rc1.initrd tag. Thanks! Christian -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQRAhzRXHqcMeLMyaSiRxhvAZXjcogUCaYX49gAKCRCRxhvAZXjc ordBAQD4d6Y5Zvr852s9deMTDv+ng3bFk1YHqybGe3wEuATstwD/QcvAoNFW9Nn5 n7/268Nk6jTEygT7Fm3tn42SnwOxhgU= =T203 -----END PGP SIGNATURE----- Merge tag 'vfs-7.0-rc1.initrd' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs Pull vfs initrd removal from Christian Brauner: "Remove the deprecated linuxrc-based initrd code path and related dead code. The linuxrc initrd path was deprecated in 2020 and this series completes its removal. If we see real-life regressions we'll revert. The core change removes handle_initrd() and init_linuxrc() — the entire flow that ran /linuxrc from an initrd, pivoted roots, and handed off to the real root filesystem. With that gone, initrd_load() becomes void (no longer short-circuits prepare_namespace()), rd_load_image() is simplified to always load /initrd.image instead of taking a path, and rd_load_disk() is deleted. The /proc/sys/kernel/real-root-dev sysctl and its backing variable are removed since they only existed for linuxrc to communicate the real root device back to the kernel. The no-op load_ramdisk= and prompt_ramdisk= parameters are dropped, and noinitrd and ramdisk_start= gain deprecation warnings. Initramfs is entirely unaffected. The non-linuxrc initrd path (root=/dev/ram0) is preserved but now carries a deprecation warning targeting January 2027 removal" * tag 'vfs-7.0-rc1.initrd' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs: init: remove /proc/sys/kernel/real-root-dev initrd: remove deprecated code path (linuxrc) init: remove deprecated "load_ramdisk" and "prompt_ramdisk" command line parameters
This commit is contained in:
commit
996812c453
9 changed files with 23 additions and 160 deletions
|
|
@ -34,13 +34,6 @@ static int root_wait;
|
|||
|
||||
dev_t ROOT_DEV;
|
||||
|
||||
static int __init load_ramdisk(char *str)
|
||||
{
|
||||
pr_warn("ignoring the deprecated load_ramdisk= option\n");
|
||||
return 1;
|
||||
}
|
||||
__setup("load_ramdisk=", load_ramdisk);
|
||||
|
||||
static int __init readonly(char *str)
|
||||
{
|
||||
if (*str)
|
||||
|
|
@ -484,13 +477,11 @@ void __init prepare_namespace(void)
|
|||
if (saved_root_name[0])
|
||||
ROOT_DEV = parse_root_device(saved_root_name);
|
||||
|
||||
if (initrd_load(saved_root_name))
|
||||
goto out;
|
||||
initrd_load();
|
||||
|
||||
if (root_wait)
|
||||
wait_for_root(saved_root_name);
|
||||
mount_root(saved_root_name);
|
||||
out:
|
||||
devtmpfs_mount();
|
||||
init_mount(".", "/", NULL, MS_MOVE, NULL);
|
||||
init_chroot(".");
|
||||
|
|
|
|||
|
|
@ -23,25 +23,15 @@ static inline __init int create_dev(char *name, dev_t dev)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_RAM
|
||||
|
||||
int __init rd_load_disk(int n);
|
||||
int __init rd_load_image(char *from);
|
||||
|
||||
int __init rd_load_image(void);
|
||||
#else
|
||||
|
||||
static inline int rd_load_disk(int n) { return 0; }
|
||||
static inline int rd_load_image(char *from) { return 0; }
|
||||
|
||||
static inline int rd_load_image(void) { return 0; }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
bool __init initrd_load(char *root_device_name);
|
||||
void __init initrd_load(void);
|
||||
#else
|
||||
static inline bool initrd_load(char *root_device_name)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void initrd_load(void) { }
|
||||
#endif
|
||||
|
||||
/* Ensure that async file closing finished to prevent spurious errors. */
|
||||
|
|
|
|||
|
|
@ -2,45 +2,20 @@
|
|||
#include <linux/unistd.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/minix_fs.h>
|
||||
#include <linux/romfs_fs.h>
|
||||
#include <linux/initrd.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/freezer.h>
|
||||
#include <linux/kmod.h>
|
||||
#include <uapi/linux/mount.h>
|
||||
|
||||
#include "do_mounts.h"
|
||||
|
||||
unsigned long initrd_start, initrd_end;
|
||||
int initrd_below_start_ok;
|
||||
static unsigned int real_root_dev; /* do_proc_dointvec cannot handle kdev_t */
|
||||
static int __initdata mount_initrd = 1;
|
||||
|
||||
phys_addr_t phys_initrd_start __initdata;
|
||||
unsigned long phys_initrd_size __initdata;
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
static const struct ctl_table kern_do_mounts_initrd_table[] = {
|
||||
{
|
||||
.procname = "real-root-dev",
|
||||
.data = &real_root_dev,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
};
|
||||
|
||||
static __init int kernel_do_mounts_initrd_sysctls_init(void)
|
||||
{
|
||||
register_sysctl_init("kernel", kern_do_mounts_initrd_table);
|
||||
return 0;
|
||||
}
|
||||
late_initcall(kernel_do_mounts_initrd_sysctls_init);
|
||||
#endif /* CONFIG_SYSCTL */
|
||||
|
||||
static int __init no_initrd(char *str)
|
||||
{
|
||||
pr_warn("noinitrd option is deprecated and will be removed soon\n");
|
||||
mount_initrd = 0;
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -70,85 +45,19 @@ static int __init early_initrd(char *p)
|
|||
}
|
||||
early_param("initrd", early_initrd);
|
||||
|
||||
static int __init init_linuxrc(struct subprocess_info *info, struct cred *new)
|
||||
{
|
||||
ksys_unshare(CLONE_FS | CLONE_FILES);
|
||||
console_on_rootfs();
|
||||
/* move initrd over / and chdir/chroot in initrd root */
|
||||
init_chdir("/root");
|
||||
init_mount(".", "/", NULL, MS_MOVE, NULL);
|
||||
init_chroot(".");
|
||||
ksys_setsid();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __init handle_initrd(char *root_device_name)
|
||||
{
|
||||
struct subprocess_info *info;
|
||||
static char *argv[] = { "linuxrc", NULL, };
|
||||
extern char *envp_init[];
|
||||
int error;
|
||||
|
||||
pr_warn("using deprecated initrd support, will be removed soon.\n");
|
||||
|
||||
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_device_name,
|
||||
root_mountflags & ~MS_RDONLY);
|
||||
init_mkdir("/old", 0700);
|
||||
init_chdir("/old");
|
||||
|
||||
info = call_usermodehelper_setup("/linuxrc", argv, envp_init,
|
||||
GFP_KERNEL, init_linuxrc, NULL, NULL);
|
||||
if (!info)
|
||||
return;
|
||||
call_usermodehelper_exec(info, UMH_WAIT_PROC|UMH_FREEZABLE);
|
||||
|
||||
/* move initrd to rootfs' /old */
|
||||
init_mount("..", ".", NULL, MS_MOVE, NULL);
|
||||
/* switch root and cwd back to / of rootfs */
|
||||
init_chroot("..");
|
||||
|
||||
if (new_decode_dev(real_root_dev) == Root_RAM0) {
|
||||
init_chdir("/old");
|
||||
return;
|
||||
}
|
||||
|
||||
init_chdir("/");
|
||||
ROOT_DEV = new_decode_dev(real_root_dev);
|
||||
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);
|
||||
if (!error)
|
||||
printk("okay\n");
|
||||
else {
|
||||
if (error == -ENOENT)
|
||||
printk("/initrd does not exist. Ignored.\n");
|
||||
else
|
||||
printk("failed\n");
|
||||
printk(KERN_NOTICE "Unmounting old root\n");
|
||||
init_umount("/old", MNT_DETACH);
|
||||
}
|
||||
}
|
||||
|
||||
bool __init initrd_load(char *root_device_name)
|
||||
void __init initrd_load(void)
|
||||
{
|
||||
if (mount_initrd) {
|
||||
create_dev("/dev/ram", Root_RAM0);
|
||||
/*
|
||||
* Load the initrd data into /dev/ram0. Execute it as initrd
|
||||
* unless /dev/ram0 is supposed to be our actual root device,
|
||||
* in that case the ram disk is just set up here, and gets
|
||||
* mounted in the normal path.
|
||||
* Load the initrd data into /dev/ram0.
|
||||
*/
|
||||
if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0) {
|
||||
init_unlink("/initrd.image");
|
||||
handle_initrd(root_device_name);
|
||||
return true;
|
||||
if (rd_load_image()) {
|
||||
pr_warn("using deprecated initrd support, will be removed in January 2027; "
|
||||
"use initramfs instead or (as a last resort) /sys/firmware/initrd; "
|
||||
"see section \"Workaround\" in "
|
||||
"https://lore.kernel.org/lkml/20251010094047.3111495-1-safinaskar@gmail.com\n");
|
||||
}
|
||||
}
|
||||
init_unlink("/initrd.image");
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,17 +18,11 @@
|
|||
static struct file *in_file, *out_file;
|
||||
static loff_t in_pos, out_pos;
|
||||
|
||||
static int __init prompt_ramdisk(char *str)
|
||||
{
|
||||
pr_warn("ignoring the deprecated prompt_ramdisk= option\n");
|
||||
return 1;
|
||||
}
|
||||
__setup("prompt_ramdisk=", prompt_ramdisk);
|
||||
|
||||
int __initdata rd_image_start; /* starting block # of image */
|
||||
|
||||
static int __init ramdisk_start_setup(char *str)
|
||||
{
|
||||
pr_warn("ramdisk_start= option is deprecated and will be removed soon\n");
|
||||
return kstrtoint(str, 0, &rd_image_start) == 0;
|
||||
}
|
||||
__setup("ramdisk_start=", ramdisk_start_setup);
|
||||
|
|
@ -183,7 +177,7 @@ static unsigned long nr_blocks(struct file *file)
|
|||
return i_size_read(inode) >> 10;
|
||||
}
|
||||
|
||||
int __init rd_load_image(char *from)
|
||||
int __init rd_load_image(void)
|
||||
{
|
||||
int res = 0;
|
||||
unsigned long rd_blocks, devblocks, nr_disks;
|
||||
|
|
@ -197,7 +191,7 @@ int __init rd_load_image(char *from)
|
|||
if (IS_ERR(out_file))
|
||||
goto out;
|
||||
|
||||
in_file = filp_open(from, O_RDONLY, 0);
|
||||
in_file = filp_open("/initrd.image", O_RDONLY, 0);
|
||||
if (IS_ERR(in_file))
|
||||
goto noclose_input;
|
||||
|
||||
|
|
@ -226,10 +220,7 @@ int __init rd_load_image(char *from)
|
|||
/*
|
||||
* OK, time to copy in the data
|
||||
*/
|
||||
if (strcmp(from, "/initrd.image") == 0)
|
||||
devblocks = nblocks;
|
||||
else
|
||||
devblocks = nr_blocks(in_file);
|
||||
devblocks = nblocks;
|
||||
|
||||
if (devblocks == 0) {
|
||||
printk(KERN_ERR "RAMDISK: could not determine device size\n");
|
||||
|
|
@ -273,13 +264,6 @@ out:
|
|||
return res;
|
||||
}
|
||||
|
||||
int __init rd_load_disk(int n)
|
||||
{
|
||||
create_dev("/dev/root", ROOT_DEV);
|
||||
create_dev("/dev/ram", MKDEV(RAMDISK_MAJOR, n));
|
||||
return rd_load_image("/dev/root");
|
||||
}
|
||||
|
||||
static int exit_code;
|
||||
static int decompress_error;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue