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,
path_put(&path);
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 *);
int path_mount(const char *dev_name, struct path *path,
const char *type_page, unsigned long flags, void *data_page);
int path_umount(struct path *path, int flags);
/*
* fs_struct.c
......
......@@ -1706,7 +1706,7 @@ static inline bool may_mandlock(void)
}
#endif
static int path_umount(struct path *path, int flags)
int path_umount(struct path *path, int flags)
{
struct mount *mnt;
int retval;
......@@ -1736,7 +1736,7 @@ static int path_umount(struct path *path, int flags)
return retval;
}
int ksys_umount(char __user *name, int flags)
static int ksys_umount(char __user *name, int flags)
{
int lookup_flags = LOOKUP_MOUNTPOINT;
struct path path;
......
......@@ -2,3 +2,4 @@
int __init init_mount(const char *dev_name, const char *dir_name,
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);
* the ksys_xyzyyz() functions prototyped below.
*/
int ksys_umount(char __user *name, int flags);
int ksys_chroot(const char __user *filename);
ssize_t ksys_write(unsigned int fd, const char __user *buf, size_t count);
int ksys_chdir(const char __user *filename);
......
......@@ -122,7 +122,7 @@ static void __init handle_initrd(void)
else
printk("failed\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