diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2005-06-21 00:15:16 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-26 15:25:05 -0400 |
| commit | bdaf8529385d5126ef791e8f1914afff8cd59bcf (patch) | |
| tree | aa9e917703526ad034a19cf1b16002aba486cd17 /init | |
| parent | a29641883f57f36424e3219ae9ff48dd6cd34de0 (diff) | |
[PATCH] devfs: Remove devfs from the init code
This patch removes the devfs code from the init/ directory.
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'init')
| -rw-r--r-- | init/Makefile | 1 | ||||
| -rw-r--r-- | init/do_mounts.c | 8 | ||||
| -rw-r--r-- | init/do_mounts.h | 15 | ||||
| -rw-r--r-- | init/do_mounts_devfs.c | 137 | ||||
| -rw-r--r-- | init/do_mounts_initrd.c | 6 | ||||
| -rw-r--r-- | init/do_mounts_md.c | 7 | ||||
| -rw-r--r-- | init/do_mounts_rd.c | 4 |
7 files changed, 10 insertions, 168 deletions
diff --git a/init/Makefile b/init/Makefile index a2300078f2b7..633a268d270d 100644 --- a/init/Makefile +++ b/init/Makefile | |||
| @@ -6,7 +6,6 @@ obj-y := main.o version.o mounts.o initramfs.o | |||
| 6 | obj-$(CONFIG_GENERIC_CALIBRATE_DELAY) += calibrate.o | 6 | obj-$(CONFIG_GENERIC_CALIBRATE_DELAY) += calibrate.o |
| 7 | 7 | ||
| 8 | mounts-y := do_mounts.o | 8 | mounts-y := do_mounts.o |
| 9 | mounts-$(CONFIG_DEVFS_FS) += do_mounts_devfs.o | ||
| 10 | mounts-$(CONFIG_BLK_DEV_RAM) += do_mounts_rd.o | 9 | mounts-$(CONFIG_BLK_DEV_RAM) += do_mounts_rd.o |
| 11 | mounts-$(CONFIG_BLK_DEV_INITRD) += do_mounts_initrd.o | 10 | mounts-$(CONFIG_BLK_DEV_INITRD) += do_mounts_initrd.o |
| 12 | mounts-$(CONFIG_BLK_DEV_MD) += do_mounts_md.o | 11 | mounts-$(CONFIG_BLK_DEV_MD) += do_mounts_md.o |
diff --git a/init/do_mounts.c b/init/do_mounts.c index 21b3b8f33a72..94aeec7aa917 100644 --- a/init/do_mounts.c +++ b/init/do_mounts.c | |||
| @@ -325,7 +325,7 @@ static int __init mount_nfs_root(void) | |||
| 325 | { | 325 | { |
| 326 | void *data = nfs_root_data(); | 326 | void *data = nfs_root_data(); |
| 327 | 327 | ||
| 328 | create_dev("/dev/root", ROOT_DEV, NULL); | 328 | create_dev("/dev/root", ROOT_DEV); |
| 329 | if (data && | 329 | if (data && |
| 330 | do_mount_root("/dev/root", "nfs", root_mountflags, data) == 0) | 330 | do_mount_root("/dev/root", "nfs", root_mountflags, data) == 0) |
| 331 | return 1; | 331 | return 1; |
| @@ -386,7 +386,7 @@ void __init mount_root(void) | |||
| 386 | change_floppy("root floppy"); | 386 | change_floppy("root floppy"); |
| 387 | } | 387 | } |
| 388 | #endif | 388 | #endif |
| 389 | create_dev("/dev/root", ROOT_DEV, root_device_name); | 389 | create_dev("/dev/root", ROOT_DEV); |
| 390 | mount_block_root("/dev/root", root_mountflags); | 390 | mount_block_root("/dev/root", root_mountflags); |
| 391 | } | 391 | } |
| 392 | 392 | ||
| @@ -397,8 +397,6 @@ void __init prepare_namespace(void) | |||
| 397 | { | 397 | { |
| 398 | int is_floppy; | 398 | int is_floppy; |
| 399 | 399 | ||
| 400 | mount_devfs(); | ||
| 401 | |||
| 402 | if (root_delay) { | 400 | if (root_delay) { |
| 403 | printk(KERN_INFO "Waiting %dsec before mounting root device...\n", | 401 | printk(KERN_INFO "Waiting %dsec before mounting root device...\n", |
| 404 | root_delay); | 402 | root_delay); |
| @@ -428,10 +426,8 @@ void __init prepare_namespace(void) | |||
| 428 | 426 | ||
| 429 | mount_root(); | 427 | mount_root(); |
| 430 | out: | 428 | out: |
| 431 | umount_devfs("/dev"); | ||
| 432 | sys_mount(".", "/", NULL, MS_MOVE, NULL); | 429 | sys_mount(".", "/", NULL, MS_MOVE, NULL); |
| 433 | sys_chroot("."); | 430 | sys_chroot("."); |
| 434 | security_sb_post_mountroot(); | 431 | security_sb_post_mountroot(); |
| 435 | mount_devfs_fs (); | ||
| 436 | } | 432 | } |
| 437 | 433 | ||
diff --git a/init/do_mounts.h b/init/do_mounts.h index e0a7ac9649e1..66548efe4c3c 100644 --- a/init/do_mounts.h +++ b/init/do_mounts.h | |||
| @@ -15,25 +15,12 @@ void mount_root(void); | |||
| 15 | extern int root_mountflags; | 15 | extern int root_mountflags; |
| 16 | extern char *root_device_name; | 16 | extern char *root_device_name; |
| 17 | 17 | ||
| 18 | #ifdef CONFIG_DEVFS_FS | 18 | static inline int create_dev(char *name, dev_t dev) |
| 19 | |||
| 20 | void mount_devfs(void); | ||
| 21 | void umount_devfs(char *path); | ||
| 22 | int create_dev(char *name, dev_t dev, char *devfs_name); | ||
| 23 | |||
| 24 | #else | ||
| 25 | |||
| 26 | static inline void mount_devfs(void) {} | ||
| 27 | static inline void umount_devfs(const char *path) {} | ||
| 28 | |||
| 29 | static inline int create_dev(char *name, dev_t dev, char *devfs_name) | ||
| 30 | { | 19 | { |
| 31 | sys_unlink(name); | 20 | sys_unlink(name); |
| 32 | return sys_mknod(name, S_IFBLK|0600, new_encode_dev(dev)); | 21 | return sys_mknod(name, S_IFBLK|0600, new_encode_dev(dev)); |
| 33 | } | 22 | } |
| 34 | 23 | ||
| 35 | #endif | ||
| 36 | |||
| 37 | #if BITS_PER_LONG == 32 | 24 | #if BITS_PER_LONG == 32 |
| 38 | static inline u32 bstat(char *name) | 25 | static inline u32 bstat(char *name) |
| 39 | { | 26 | { |
diff --git a/init/do_mounts_devfs.c b/init/do_mounts_devfs.c deleted file mode 100644 index cc526474690a..000000000000 --- a/init/do_mounts_devfs.c +++ /dev/null | |||
| @@ -1,137 +0,0 @@ | |||
| 1 | |||
| 2 | #include <linux/kernel.h> | ||
| 3 | #include <linux/dirent.h> | ||
| 4 | #include <linux/string.h> | ||
| 5 | |||
| 6 | #include "do_mounts.h" | ||
| 7 | |||
| 8 | void __init mount_devfs(void) | ||
| 9 | { | ||
| 10 | sys_mount("devfs", "/dev", "devfs", 0, NULL); | ||
| 11 | } | ||
| 12 | |||
| 13 | void __init umount_devfs(char *path) | ||
| 14 | { | ||
| 15 | sys_umount(path, 0); | ||
| 16 | } | ||
| 17 | |||
| 18 | /* | ||
| 19 | * If the dir will fit in *buf, return its length. If it won't fit, return | ||
| 20 | * zero. Return -ve on error. | ||
| 21 | */ | ||
| 22 | static int __init do_read_dir(int fd, void *buf, int len) | ||
| 23 | { | ||
| 24 | long bytes, n; | ||
| 25 | char *p = buf; | ||
| 26 | sys_lseek(fd, 0, 0); | ||
| 27 | |||
| 28 | for (bytes = 0; bytes < len; bytes += n) { | ||
| 29 | n = sys_getdents64(fd, (struct linux_dirent64 *)(p + bytes), | ||
| 30 | len - bytes); | ||
| 31 | if (n < 0) | ||
| 32 | return n; | ||
| 33 | if (n == 0) | ||
| 34 | return bytes; | ||
| 35 | } | ||
| 36 | return 0; | ||
| 37 | } | ||
| 38 | |||
| 39 | /* | ||
| 40 | * Try to read all of a directory. Returns the contents at *p, which | ||
| 41 | * is kmalloced memory. Returns the number of bytes read at *len. Returns | ||
| 42 | * NULL on error. | ||
| 43 | */ | ||
| 44 | static void * __init read_dir(char *path, int *len) | ||
| 45 | { | ||
| 46 | int size; | ||
| 47 | int fd = sys_open(path, 0, 0); | ||
| 48 | |||
| 49 | *len = 0; | ||
| 50 | if (fd < 0) | ||
| 51 | return NULL; | ||
| 52 | |||
| 53 | for (size = 1 << 9; size <= (PAGE_SIZE << MAX_ORDER); size <<= 1) { | ||
| 54 | void *p = kmalloc(size, GFP_KERNEL); | ||
| 55 | int n; | ||
| 56 | if (!p) | ||
| 57 | break; | ||
| 58 | n = do_read_dir(fd, p, size); | ||
| 59 | if (n > 0) { | ||
| 60 | sys_close(fd); | ||
| 61 | *len = n; | ||
| 62 | return p; | ||
| 63 | } | ||
| 64 | kfree(p); | ||
| 65 | if (n == -EINVAL) | ||
| 66 | continue; /* Try a larger buffer */ | ||
| 67 | if (n < 0) | ||
| 68 | break; | ||
| 69 | } | ||
| 70 | sys_close(fd); | ||
| 71 | return NULL; | ||
| 72 | } | ||
| 73 | |||
| 74 | /* | ||
| 75 | * recursively scan <path>, looking for a device node of type <dev> | ||
| 76 | */ | ||
| 77 | static int __init find_in_devfs(char *path, unsigned dev) | ||
| 78 | { | ||
| 79 | char *end = path + strlen(path); | ||
| 80 | int rest = path + 64 - end; | ||
| 81 | int size; | ||
| 82 | char *p = read_dir(path, &size); | ||
| 83 | char *s; | ||
| 84 | |||
| 85 | if (!p) | ||
| 86 | return -1; | ||
| 87 | for (s = p; s < p + size; s += ((struct linux_dirent64 *)s)->d_reclen) { | ||
| 88 | struct linux_dirent64 *d = (struct linux_dirent64 *)s; | ||
| 89 | if (strlen(d->d_name) + 2 > rest) | ||
| 90 | continue; | ||
| 91 | switch (d->d_type) { | ||
| 92 | case DT_BLK: | ||
| 93 | sprintf(end, "/%s", d->d_name); | ||
| 94 | if (bstat(path) != dev) | ||
| 95 | break; | ||
| 96 | kfree(p); | ||
| 97 | return 0; | ||
| 98 | case DT_DIR: | ||
| 99 | if (strcmp(d->d_name, ".") == 0) | ||
| 100 | break; | ||
| 101 | if (strcmp(d->d_name, "..") == 0) | ||
| 102 | break; | ||
| 103 | sprintf(end, "/%s", d->d_name); | ||
| 104 | if (find_in_devfs(path, dev) < 0) | ||
| 105 | break; | ||
| 106 | kfree(p); | ||
| 107 | return 0; | ||
| 108 | } | ||
| 109 | } | ||
| 110 | kfree(p); | ||
| 111 | return -1; | ||
| 112 | } | ||
| 113 | |||
| 114 | /* | ||
| 115 | * create a device node called <name> which points to | ||
| 116 | * <devfs_name> if possible, otherwise find a device node | ||
| 117 | * which matches <dev> and make <name> a symlink pointing to it. | ||
| 118 | */ | ||
| 119 | int __init create_dev(char *name, dev_t dev, char *devfs_name) | ||
| 120 | { | ||
| 121 | char path[64]; | ||
| 122 | |||
| 123 | sys_unlink(name); | ||
| 124 | if (devfs_name && devfs_name[0]) { | ||
| 125 | if (strncmp(devfs_name, "/dev/", 5) == 0) | ||
| 126 | devfs_name += 5; | ||
| 127 | sprintf(path, "/dev/%s", devfs_name); | ||
| 128 | if (sys_access(path, 0) == 0) | ||
| 129 | return sys_symlink(devfs_name, name); | ||
| 130 | } | ||
| 131 | if (!dev) | ||
| 132 | return -1; | ||
| 133 | strcpy(path, "/dev"); | ||
| 134 | if (find_in_devfs(path, new_encode_dev(dev)) < 0) | ||
| 135 | return -1; | ||
| 136 | return sys_symlink(path + 5, name); | ||
| 137 | } | ||
diff --git a/init/do_mounts_initrd.c b/init/do_mounts_initrd.c index 405f9031af87..a06f037fa000 100644 --- a/init/do_mounts_initrd.c +++ b/init/do_mounts_initrd.c | |||
| @@ -44,7 +44,7 @@ static void __init handle_initrd(void) | |||
| 44 | int pid; | 44 | int pid; |
| 45 | 45 | ||
| 46 | real_root_dev = new_encode_dev(ROOT_DEV); | 46 | real_root_dev = new_encode_dev(ROOT_DEV); |
| 47 | create_dev("/dev/root.old", Root_RAM0, NULL); | 47 | create_dev("/dev/root.old", Root_RAM0); |
| 48 | /* mount initrd on rootfs' /root */ | 48 | /* mount initrd on rootfs' /root */ |
| 49 | mount_block_root("/dev/root.old", root_mountflags & ~MS_RDONLY); | 49 | mount_block_root("/dev/root.old", root_mountflags & ~MS_RDONLY); |
| 50 | sys_mkdir("/old", 0700); | 50 | sys_mkdir("/old", 0700); |
| @@ -54,7 +54,6 @@ static void __init handle_initrd(void) | |||
| 54 | sys_chdir("/root"); | 54 | sys_chdir("/root"); |
| 55 | sys_mount(".", "/", NULL, MS_MOVE, NULL); | 55 | sys_mount(".", "/", NULL, MS_MOVE, NULL); |
| 56 | sys_chroot("."); | 56 | sys_chroot("."); |
| 57 | mount_devfs_fs (); | ||
| 58 | 57 | ||
| 59 | current->flags |= PF_NOFREEZE; | 58 | current->flags |= PF_NOFREEZE; |
| 60 | pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD); | 59 | pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD); |
| @@ -71,7 +70,6 @@ static void __init handle_initrd(void) | |||
| 71 | sys_chroot("."); | 70 | sys_chroot("."); |
| 72 | sys_close(old_fd); | 71 | sys_close(old_fd); |
| 73 | sys_close(root_fd); | 72 | sys_close(root_fd); |
| 74 | umount_devfs("/old/dev"); | ||
| 75 | 73 | ||
| 76 | if (new_decode_dev(real_root_dev) == Root_RAM0) { | 74 | if (new_decode_dev(real_root_dev) == Root_RAM0) { |
| 77 | sys_chdir("/old"); | 75 | sys_chdir("/old"); |
| @@ -107,7 +105,7 @@ static void __init handle_initrd(void) | |||
| 107 | int __init initrd_load(void) | 105 | int __init initrd_load(void) |
| 108 | { | 106 | { |
| 109 | if (mount_initrd) { | 107 | if (mount_initrd) { |
| 110 | create_dev("/dev/ram", Root_RAM0, NULL); | 108 | create_dev("/dev/ram", Root_RAM0); |
| 111 | /* | 109 | /* |
| 112 | * Load the initrd data into /dev/ram0. Execute it as initrd | 110 | * Load the initrd data into /dev/ram0. Execute it as initrd |
| 113 | * unless /dev/ram0 is supposed to be our actual root device, | 111 | * unless /dev/ram0 is supposed to be our actual root device, |
diff --git a/init/do_mounts_md.c b/init/do_mounts_md.c index f6f36806f84a..2429e1bf8c60 100644 --- a/init/do_mounts_md.c +++ b/init/do_mounts_md.c | |||
| @@ -125,19 +125,18 @@ static void __init md_setup_drive(void) | |||
| 125 | int err = 0; | 125 | int err = 0; |
| 126 | char *devname; | 126 | char *devname; |
| 127 | mdu_disk_info_t dinfo; | 127 | mdu_disk_info_t dinfo; |
| 128 | char name[16], devfs_name[16]; | 128 | char name[16]; |
| 129 | 129 | ||
| 130 | minor = md_setup_args[ent].minor; | 130 | minor = md_setup_args[ent].minor; |
| 131 | partitioned = md_setup_args[ent].partitioned; | 131 | partitioned = md_setup_args[ent].partitioned; |
| 132 | devname = md_setup_args[ent].device_names; | 132 | devname = md_setup_args[ent].device_names; |
| 133 | 133 | ||
| 134 | sprintf(name, "/dev/md%s%d", partitioned?"_d":"", minor); | 134 | sprintf(name, "/dev/md%s%d", partitioned?"_d":"", minor); |
| 135 | sprintf(devfs_name, "/dev/md/%s%d", partitioned?"d":"", minor); | ||
| 136 | if (partitioned) | 135 | if (partitioned) |
| 137 | dev = MKDEV(mdp_major, minor << MdpMinorShift); | 136 | dev = MKDEV(mdp_major, minor << MdpMinorShift); |
| 138 | else | 137 | else |
| 139 | dev = MKDEV(MD_MAJOR, minor); | 138 | dev = MKDEV(MD_MAJOR, minor); |
| 140 | create_dev(name, dev, devfs_name); | 139 | create_dev(name, dev); |
| 141 | for (i = 0; i < MD_SB_DISKS && devname != 0; i++) { | 140 | for (i = 0; i < MD_SB_DISKS && devname != 0; i++) { |
| 142 | char *p; | 141 | char *p; |
| 143 | char comp_name[64]; | 142 | char comp_name[64]; |
| @@ -272,7 +271,7 @@ __setup("md=", md_setup); | |||
| 272 | 271 | ||
| 273 | void __init md_run_setup(void) | 272 | void __init md_run_setup(void) |
| 274 | { | 273 | { |
| 275 | create_dev("/dev/md0", MKDEV(MD_MAJOR, 0), "md/0"); | 274 | create_dev("/dev/md0", MKDEV(MD_MAJOR, 0)); |
| 276 | if (raid_noautodetect) | 275 | if (raid_noautodetect) |
| 277 | printk(KERN_INFO "md: Skipping autodetection of RAID arrays. (raid=noautodetect)\n"); | 276 | printk(KERN_INFO "md: Skipping autodetection of RAID arrays. (raid=noautodetect)\n"); |
| 278 | else { | 277 | else { |
diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c index c2683fcd792d..ed652f40f075 100644 --- a/init/do_mounts_rd.c +++ b/init/do_mounts_rd.c | |||
| @@ -262,8 +262,8 @@ int __init rd_load_disk(int n) | |||
| 262 | { | 262 | { |
| 263 | if (rd_prompt) | 263 | if (rd_prompt) |
| 264 | change_floppy("root floppy disk to be loaded into RAM disk"); | 264 | change_floppy("root floppy disk to be loaded into RAM disk"); |
| 265 | create_dev("/dev/root", ROOT_DEV, root_device_name); | 265 | create_dev("/dev/root", ROOT_DEV); |
| 266 | create_dev("/dev/ram", MKDEV(RAMDISK_MAJOR, n), NULL); | 266 | create_dev("/dev/ram", MKDEV(RAMDISK_MAJOR, n)); |
| 267 | return rd_load_image("/dev/root"); | 267 | return rd_load_image("/dev/root"); |
| 268 | } | 268 | } |
| 269 | 269 | ||
