Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69753a0f authored by Al Viro's avatar Al Viro
Browse files

switch devtmpfs to kern_path_create()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 2780f1ff
Loading
Loading
Loading
Loading
+36 −47
Original line number Diff line number Diff line
@@ -144,27 +144,21 @@ int devtmpfs_delete_node(struct device *dev)

static int dev_mkdir(const char *name, mode_t mode)
{
	struct nameidata nd;
	struct dentry *dentry;
	struct path path;
	int err;

	err = kern_path_parent(name, &nd);
	if (err)
		return err;
	dentry = kern_path_create(AT_FDCWD, name, &path, 1);
	if (IS_ERR(dentry))
		return PTR_ERR(dentry);

	dentry = lookup_create(&nd, 1);
	if (!IS_ERR(dentry)) {
		err = vfs_mkdir(nd.path.dentry->d_inode, dentry, mode);
	err = vfs_mkdir(path.dentry->d_inode, dentry, mode);
	if (!err)
		/* mark as kernel-created inode */
		dentry->d_inode->i_private = &thread;
	dput(dentry);
	} else {
		err = PTR_ERR(dentry);
	}

	mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
	path_put(&nd.path);
	mutex_unlock(&path.dentry->d_inode->i_mutex);
	path_put(&path);
	return err;
}

@@ -203,21 +197,19 @@ static int create_path(const char *nodepath)

static int handle_create(const char *nodename, mode_t mode, struct device *dev)
{
	struct nameidata nd;
	struct dentry *dentry;
	struct path path;
	int err;

	err = kern_path_parent(nodename, &nd);
	if (err == -ENOENT) {
	dentry = kern_path_create(AT_FDCWD, nodename, &path, 0);
	if (dentry == ERR_PTR(-ENOENT)) {
		create_path(nodename);
		err = kern_path_parent(nodename, &nd);
		dentry = kern_path_create(AT_FDCWD, nodename, &path, 0);
	}
	if (err)
		return err;
	if (IS_ERR(dentry))
		return PTR_ERR(dentry);

	dentry = lookup_create(&nd, 0);
	if (!IS_ERR(dentry)) {
		err = vfs_mknod(nd.path.dentry->d_inode,
	err = vfs_mknod(path.dentry->d_inode,
			dentry, mode, dev->devt);
	if (!err) {
		struct iattr newattrs;
@@ -233,12 +225,9 @@ static int handle_create(const char *nodename, mode_t mode, struct device *dev)
		dentry->d_inode->i_private = &thread;
	}
	dput(dentry);
	} else {
		err = PTR_ERR(dentry);
	}

	mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
	path_put(&nd.path);
	mutex_unlock(&path.dentry->d_inode->i_mutex);
	path_put(&path);
	return err;
}