Commit db63f1e3 authored by Christoph Hellwig's avatar Christoph Hellwig
Browse files

init: add an init_chdir helper



Add a simple helper to chdir with a kernel space file name and switch
the early init code over to it.  Remove the now unused ksys_chdir.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 20cce026
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -412,7 +412,7 @@ static int __init devtmpfs_setup(void *p)
	err = init_mount("devtmpfs", "/", "devtmpfs", MS_SILENT, NULL);
	if (err)
		goto out;
	ksys_chdir("/.."); /* will traverse into overmounted root */
	init_chdir("/.."); /* will traverse into overmounted root */
	ksys_chroot(".");
out:
	*(int *)p = err;
+16 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
#include <linux/mount.h>
#include <linux/namei.h>
#include <linux/fs.h>
#include <linux/fs_struct.h>
#include <linux/init_syscalls.h>
#include "internal.h"

@@ -38,6 +39,21 @@ int __init init_umount(const char *name, int flags)
	return path_umount(&path, flags);
}

int __init init_chdir(const char *filename)
{
	struct path path;
	int error;

	error = kern_path(filename, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &path);
	if (error)
		return error;
	error = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_CHDIR);
	if (!error)
		set_fs_pwd(current->fs, &path);
	path_put(&path);
	return error;
}

int __init init_unlink(const char *pathname)
{
	return do_unlinkat(AT_FDCWD, getname_kernel(pathname));
+1 −6
Original line number Diff line number Diff line
@@ -482,7 +482,7 @@ SYSCALL_DEFINE2(access, const char __user *, filename, int, mode)
	return do_faccessat(AT_FDCWD, filename, mode, 0);
}

int ksys_chdir(const char __user *filename)
SYSCALL_DEFINE1(chdir, const char __user *, filename)
{
	struct path path;
	int error;
@@ -508,11 +508,6 @@ out:
	return error;
}

SYSCALL_DEFINE1(chdir, const char __user *, filename)
{
	return ksys_chdir(filename);
}

SYSCALL_DEFINE1(fchdir, unsigned int, fd)
{
	struct fd f = fdget_raw(fd);
+1 −0
Original line number Diff line number Diff line
@@ -3,5 +3,6 @@
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);
int __init init_chdir(const char *filename);
int __init init_unlink(const char *pathname);
int __init init_rmdir(const char *pathname);
+0 −1
Original line number Diff line number Diff line
@@ -1238,7 +1238,6 @@ asmlinkage long sys_ni_syscall(void);

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);
int ksys_fchown(unsigned int fd, uid_t user, gid_t group);
ssize_t ksys_read(unsigned int fd, char __user *buf, size_t count);
void ksys_sync(void);
Loading