Skip to content

Commit

Permalink
init: add an init_umount helper
Browse files Browse the repository at this point in the history
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: Christoph Hellwig <[email protected]>
  • Loading branch information
Christoph Hellwig committed Jul 31, 2020
1 parent c60166f commit 09267de
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 4 deletions.
14 changes: 14 additions & 0 deletions fs/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 change: 1 addition & 0 deletions fs/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions fs/namespace.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions include/linux/init_syscalls.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
1 change: 0 additions & 1 deletion include/linux/syscalls.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion init/do_mounts_initrd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

Expand Down

0 comments on commit 09267de

Please sign in to comment.