Loading include/linux/devfs_fs_kernel.h +0 −4 Original line number Diff line number Diff line Loading @@ -32,8 +32,4 @@ static inline int devfs_register_tape(const char *name) static inline void devfs_unregister_tape(int num) { } static inline void mount_devfs_fs(void) { return; } #endif /* _LINUX_DEVFS_FS_KERNEL_H */ init/Makefile +0 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ obj-y := main.o version.o mounts.o initramfs.o obj-$(CONFIG_GENERIC_CALIBRATE_DELAY) += calibrate.o mounts-y := do_mounts.o mounts-$(CONFIG_DEVFS_FS) += do_mounts_devfs.o mounts-$(CONFIG_BLK_DEV_RAM) += do_mounts_rd.o mounts-$(CONFIG_BLK_DEV_INITRD) += do_mounts_initrd.o mounts-$(CONFIG_BLK_DEV_MD) += do_mounts_md.o Loading init/do_mounts.c +2 −6 Original line number Diff line number Diff line Loading @@ -325,7 +325,7 @@ static int __init mount_nfs_root(void) { void *data = nfs_root_data(); create_dev("/dev/root", ROOT_DEV, NULL); create_dev("/dev/root", ROOT_DEV); if (data && do_mount_root("/dev/root", "nfs", root_mountflags, data) == 0) return 1; Loading Loading @@ -386,7 +386,7 @@ void __init mount_root(void) change_floppy("root floppy"); } #endif create_dev("/dev/root", ROOT_DEV, root_device_name); create_dev("/dev/root", ROOT_DEV); mount_block_root("/dev/root", root_mountflags); } Loading @@ -397,8 +397,6 @@ void __init prepare_namespace(void) { int is_floppy; mount_devfs(); if (root_delay) { printk(KERN_INFO "Waiting %dsec before mounting root device...\n", root_delay); Loading Loading @@ -428,10 +426,8 @@ void __init prepare_namespace(void) mount_root(); out: umount_devfs("/dev"); sys_mount(".", "/", NULL, MS_MOVE, NULL); sys_chroot("."); security_sb_post_mountroot(); mount_devfs_fs (); } init/do_mounts.h +1 −14 Original line number Diff line number Diff line Loading @@ -15,25 +15,12 @@ void mount_root(void); extern int root_mountflags; extern char *root_device_name; #ifdef CONFIG_DEVFS_FS void mount_devfs(void); void umount_devfs(char *path); int create_dev(char *name, dev_t dev, char *devfs_name); #else static inline void mount_devfs(void) {} static inline void umount_devfs(const char *path) {} static inline int create_dev(char *name, dev_t dev, char *devfs_name) static inline int create_dev(char *name, dev_t dev) { sys_unlink(name); return sys_mknod(name, S_IFBLK|0600, new_encode_dev(dev)); } #endif #if BITS_PER_LONG == 32 static inline u32 bstat(char *name) { Loading init/do_mounts_devfs.cdeleted 100644 → 0 +0 −137 Original line number Diff line number Diff line #include <linux/kernel.h> #include <linux/dirent.h> #include <linux/string.h> #include "do_mounts.h" void __init mount_devfs(void) { sys_mount("devfs", "/dev", "devfs", 0, NULL); } void __init umount_devfs(char *path) { sys_umount(path, 0); } /* * If the dir will fit in *buf, return its length. If it won't fit, return * zero. Return -ve on error. */ static int __init do_read_dir(int fd, void *buf, int len) { long bytes, n; char *p = buf; sys_lseek(fd, 0, 0); for (bytes = 0; bytes < len; bytes += n) { n = sys_getdents64(fd, (struct linux_dirent64 *)(p + bytes), len - bytes); if (n < 0) return n; if (n == 0) return bytes; } return 0; } /* * Try to read all of a directory. Returns the contents at *p, which * is kmalloced memory. Returns the number of bytes read at *len. Returns * NULL on error. */ static void * __init read_dir(char *path, int *len) { int size; int fd = sys_open(path, 0, 0); *len = 0; if (fd < 0) return NULL; for (size = 1 << 9; size <= (PAGE_SIZE << MAX_ORDER); size <<= 1) { void *p = kmalloc(size, GFP_KERNEL); int n; if (!p) break; n = do_read_dir(fd, p, size); if (n > 0) { sys_close(fd); *len = n; return p; } kfree(p); if (n == -EINVAL) continue; /* Try a larger buffer */ if (n < 0) break; } sys_close(fd); return NULL; } /* * recursively scan <path>, looking for a device node of type <dev> */ static int __init find_in_devfs(char *path, unsigned dev) { char *end = path + strlen(path); int rest = path + 64 - end; int size; char *p = read_dir(path, &size); char *s; if (!p) return -1; for (s = p; s < p + size; s += ((struct linux_dirent64 *)s)->d_reclen) { struct linux_dirent64 *d = (struct linux_dirent64 *)s; if (strlen(d->d_name) + 2 > rest) continue; switch (d->d_type) { case DT_BLK: sprintf(end, "/%s", d->d_name); if (bstat(path) != dev) break; kfree(p); return 0; case DT_DIR: if (strcmp(d->d_name, ".") == 0) break; if (strcmp(d->d_name, "..") == 0) break; sprintf(end, "/%s", d->d_name); if (find_in_devfs(path, dev) < 0) break; kfree(p); return 0; } } kfree(p); return -1; } /* * create a device node called <name> which points to * <devfs_name> if possible, otherwise find a device node * which matches <dev> and make <name> a symlink pointing to it. */ int __init create_dev(char *name, dev_t dev, char *devfs_name) { char path[64]; sys_unlink(name); if (devfs_name && devfs_name[0]) { if (strncmp(devfs_name, "/dev/", 5) == 0) devfs_name += 5; sprintf(path, "/dev/%s", devfs_name); if (sys_access(path, 0) == 0) return sys_symlink(devfs_name, name); } if (!dev) return -1; strcpy(path, "/dev"); if (find_in_devfs(path, new_encode_dev(dev)) < 0) return -1; return sys_symlink(path + 5, name); } Loading
include/linux/devfs_fs_kernel.h +0 −4 Original line number Diff line number Diff line Loading @@ -32,8 +32,4 @@ static inline int devfs_register_tape(const char *name) static inline void devfs_unregister_tape(int num) { } static inline void mount_devfs_fs(void) { return; } #endif /* _LINUX_DEVFS_FS_KERNEL_H */
init/Makefile +0 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ obj-y := main.o version.o mounts.o initramfs.o obj-$(CONFIG_GENERIC_CALIBRATE_DELAY) += calibrate.o mounts-y := do_mounts.o mounts-$(CONFIG_DEVFS_FS) += do_mounts_devfs.o mounts-$(CONFIG_BLK_DEV_RAM) += do_mounts_rd.o mounts-$(CONFIG_BLK_DEV_INITRD) += do_mounts_initrd.o mounts-$(CONFIG_BLK_DEV_MD) += do_mounts_md.o Loading
init/do_mounts.c +2 −6 Original line number Diff line number Diff line Loading @@ -325,7 +325,7 @@ static int __init mount_nfs_root(void) { void *data = nfs_root_data(); create_dev("/dev/root", ROOT_DEV, NULL); create_dev("/dev/root", ROOT_DEV); if (data && do_mount_root("/dev/root", "nfs", root_mountflags, data) == 0) return 1; Loading Loading @@ -386,7 +386,7 @@ void __init mount_root(void) change_floppy("root floppy"); } #endif create_dev("/dev/root", ROOT_DEV, root_device_name); create_dev("/dev/root", ROOT_DEV); mount_block_root("/dev/root", root_mountflags); } Loading @@ -397,8 +397,6 @@ void __init prepare_namespace(void) { int is_floppy; mount_devfs(); if (root_delay) { printk(KERN_INFO "Waiting %dsec before mounting root device...\n", root_delay); Loading Loading @@ -428,10 +426,8 @@ void __init prepare_namespace(void) mount_root(); out: umount_devfs("/dev"); sys_mount(".", "/", NULL, MS_MOVE, NULL); sys_chroot("."); security_sb_post_mountroot(); mount_devfs_fs (); }
init/do_mounts.h +1 −14 Original line number Diff line number Diff line Loading @@ -15,25 +15,12 @@ void mount_root(void); extern int root_mountflags; extern char *root_device_name; #ifdef CONFIG_DEVFS_FS void mount_devfs(void); void umount_devfs(char *path); int create_dev(char *name, dev_t dev, char *devfs_name); #else static inline void mount_devfs(void) {} static inline void umount_devfs(const char *path) {} static inline int create_dev(char *name, dev_t dev, char *devfs_name) static inline int create_dev(char *name, dev_t dev) { sys_unlink(name); return sys_mknod(name, S_IFBLK|0600, new_encode_dev(dev)); } #endif #if BITS_PER_LONG == 32 static inline u32 bstat(char *name) { Loading
init/do_mounts_devfs.cdeleted 100644 → 0 +0 −137 Original line number Diff line number Diff line #include <linux/kernel.h> #include <linux/dirent.h> #include <linux/string.h> #include "do_mounts.h" void __init mount_devfs(void) { sys_mount("devfs", "/dev", "devfs", 0, NULL); } void __init umount_devfs(char *path) { sys_umount(path, 0); } /* * If the dir will fit in *buf, return its length. If it won't fit, return * zero. Return -ve on error. */ static int __init do_read_dir(int fd, void *buf, int len) { long bytes, n; char *p = buf; sys_lseek(fd, 0, 0); for (bytes = 0; bytes < len; bytes += n) { n = sys_getdents64(fd, (struct linux_dirent64 *)(p + bytes), len - bytes); if (n < 0) return n; if (n == 0) return bytes; } return 0; } /* * Try to read all of a directory. Returns the contents at *p, which * is kmalloced memory. Returns the number of bytes read at *len. Returns * NULL on error. */ static void * __init read_dir(char *path, int *len) { int size; int fd = sys_open(path, 0, 0); *len = 0; if (fd < 0) return NULL; for (size = 1 << 9; size <= (PAGE_SIZE << MAX_ORDER); size <<= 1) { void *p = kmalloc(size, GFP_KERNEL); int n; if (!p) break; n = do_read_dir(fd, p, size); if (n > 0) { sys_close(fd); *len = n; return p; } kfree(p); if (n == -EINVAL) continue; /* Try a larger buffer */ if (n < 0) break; } sys_close(fd); return NULL; } /* * recursively scan <path>, looking for a device node of type <dev> */ static int __init find_in_devfs(char *path, unsigned dev) { char *end = path + strlen(path); int rest = path + 64 - end; int size; char *p = read_dir(path, &size); char *s; if (!p) return -1; for (s = p; s < p + size; s += ((struct linux_dirent64 *)s)->d_reclen) { struct linux_dirent64 *d = (struct linux_dirent64 *)s; if (strlen(d->d_name) + 2 > rest) continue; switch (d->d_type) { case DT_BLK: sprintf(end, "/%s", d->d_name); if (bstat(path) != dev) break; kfree(p); return 0; case DT_DIR: if (strcmp(d->d_name, ".") == 0) break; if (strcmp(d->d_name, "..") == 0) break; sprintf(end, "/%s", d->d_name); if (find_in_devfs(path, dev) < 0) break; kfree(p); return 0; } } kfree(p); return -1; } /* * create a device node called <name> which points to * <devfs_name> if possible, otherwise find a device node * which matches <dev> and make <name> a symlink pointing to it. */ int __init create_dev(char *name, dev_t dev, char *devfs_name) { char path[64]; sys_unlink(name); if (devfs_name && devfs_name[0]) { if (strncmp(devfs_name, "/dev/", 5) == 0) devfs_name += 5; sprintf(path, "/dev/%s", devfs_name); if (sys_access(path, 0) == 0) return sys_symlink(devfs_name, name); } if (!dev) return -1; strcpy(path, "/dev"); if (find_in_devfs(path, new_encode_dev(dev)) < 0) return -1; return sys_symlink(path + 5, name); }