Commit 09267def authored by Christoph Hellwig's avatar Christoph Hellwig

init: add an init_umount helper

Like ksys_umount, but takes a kernel pointer for the destination path.
Switch over the umount in the init code, which just happen to work due to
the implicit set_fs(KERNEL_DS) during early init right now.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent c60166f0
...@@ -23,3 +23,17 @@ int __init init_mount(const char *dev_name, const char *dir_name, ...@@ -23,3 +23,17 @@ int __init init_mount(const char *dev_name, const char *dir_name,
path_put(&path); path_put(&path);
return ret; return ret;
} }
int __init init_umount(const char *name, int flags)
{
int lookup_flags = LOOKUP_MOUNTPOINT;
struct path path;
int ret;
if (!(flags & UMOUNT_NOFOLLOW))
lookup_flags |= LOOKUP_FOLLOW;
ret = kern_path(name, lookup_flags, &path);
if (ret)
return ret;
return path_umount(&path, flags);
}
...@@ -92,6 +92,7 @@ extern void dissolve_on_fput(struct vfsmount *); ...@@ -92,6 +92,7 @@ extern void dissolve_on_fput(struct vfsmount *);
int path_mount(const char *dev_name, struct path *path, int path_mount(const char *dev_name, struct path *path,
const char *type_page, unsigned long flags, void *data_page); const char *type_page, unsigned long flags, void *data_page);
int path_umount(struct path *path, int flags);
/* /*
* fs_struct.c * fs_struct.c
......
...@@ -1706,7 +1706,7 @@ static inline bool may_mandlock(void) ...@@ -1706,7 +1706,7 @@ static inline bool may_mandlock(void)
} }
#endif #endif
static int path_umount(struct path *path, int flags) int path_umount(struct path *path, int flags)
{ {
struct mount *mnt; struct mount *mnt;
int retval; int retval;
...@@ -1736,7 +1736,7 @@ static int path_umount(struct path *path, int flags) ...@@ -1736,7 +1736,7 @@ static int path_umount(struct path *path, int flags)
return retval; return retval;
} }
int ksys_umount(char __user *name, int flags) static int ksys_umount(char __user *name, int flags)
{ {
int lookup_flags = LOOKUP_MOUNTPOINT; int lookup_flags = LOOKUP_MOUNTPOINT;
struct path path; struct path path;
......
...@@ -2,3 +2,4 @@ ...@@ -2,3 +2,4 @@
int __init init_mount(const char *dev_name, const char *dir_name, int __init init_mount(const char *dev_name, const char *dir_name,
const char *type_page, unsigned long flags, void *data_page); const char *type_page, unsigned long flags, void *data_page);
int __init init_umount(const char *name, int flags);
...@@ -1236,7 +1236,6 @@ asmlinkage long sys_ni_syscall(void); ...@@ -1236,7 +1236,6 @@ asmlinkage long sys_ni_syscall(void);
* the ksys_xyzyyz() functions prototyped below. * the ksys_xyzyyz() functions prototyped below.
*/ */
int ksys_umount(char __user *name, int flags);
int ksys_chroot(const char __user *filename); int ksys_chroot(const char __user *filename);
ssize_t ksys_write(unsigned int fd, const char __user *buf, size_t count); ssize_t ksys_write(unsigned int fd, const char __user *buf, size_t count);
int ksys_chdir(const char __user *filename); int ksys_chdir(const char __user *filename);
......
...@@ -122,7 +122,7 @@ static void __init handle_initrd(void) ...@@ -122,7 +122,7 @@ static void __init handle_initrd(void)
else else
printk("failed\n"); printk("failed\n");
printk(KERN_NOTICE "Unmounting old root\n"); printk(KERN_NOTICE "Unmounting old root\n");
ksys_umount("/old", MNT_DETACH); init_umount("/old", MNT_DETACH);
} }
} }
......
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