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

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
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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);
}
+1 −0
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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 @@ dput_and_out:
	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;
+1 −0
Original line number Diff line number Diff line
@@ -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);
+0 −1
Original line number Diff line number Diff line
@@ -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);
Loading