mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-15 09:34:17 +00:00
switch devtmpfs to kern_path_create()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
2780f1ff6a
commit
69753a0f14
@ -144,27 +144,21 @@ int devtmpfs_delete_node(struct device *dev)
|
|||||||
|
|
||||||
static int dev_mkdir(const char *name, mode_t mode)
|
static int dev_mkdir(const char *name, mode_t mode)
|
||||||
{
|
{
|
||||||
struct nameidata nd;
|
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
|
struct path path;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = kern_path_parent(name, &nd);
|
dentry = kern_path_create(AT_FDCWD, name, &path, 1);
|
||||||
if (err)
|
if (IS_ERR(dentry))
|
||||||
return err;
|
return PTR_ERR(dentry);
|
||||||
|
|
||||||
dentry = lookup_create(&nd, 1);
|
err = vfs_mkdir(path.dentry->d_inode, dentry, mode);
|
||||||
if (!IS_ERR(dentry)) {
|
if (!err)
|
||||||
err = vfs_mkdir(nd.path.dentry->d_inode, dentry, mode);
|
/* mark as kernel-created inode */
|
||||||
if (!err)
|
dentry->d_inode->i_private = &thread;
|
||||||
/* mark as kernel-created inode */
|
dput(dentry);
|
||||||
dentry->d_inode->i_private = &thread;
|
mutex_unlock(&path.dentry->d_inode->i_mutex);
|
||||||
dput(dentry);
|
path_put(&path);
|
||||||
} else {
|
|
||||||
err = PTR_ERR(dentry);
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
|
|
||||||
path_put(&nd.path);
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,42 +197,37 @@ out:
|
|||||||
|
|
||||||
static int handle_create(const char *nodename, mode_t mode, struct device *dev)
|
static int handle_create(const char *nodename, mode_t mode, struct device *dev)
|
||||||
{
|
{
|
||||||
struct nameidata nd;
|
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
|
struct path path;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = kern_path_parent(nodename, &nd);
|
dentry = kern_path_create(AT_FDCWD, nodename, &path, 0);
|
||||||
if (err == -ENOENT) {
|
if (dentry == ERR_PTR(-ENOENT)) {
|
||||||
create_path(nodename);
|
create_path(nodename);
|
||||||
err = kern_path_parent(nodename, &nd);
|
dentry = kern_path_create(AT_FDCWD, nodename, &path, 0);
|
||||||
}
|
}
|
||||||
if (err)
|
if (IS_ERR(dentry))
|
||||||
return err;
|
return PTR_ERR(dentry);
|
||||||
|
|
||||||
dentry = lookup_create(&nd, 0);
|
err = vfs_mknod(path.dentry->d_inode,
|
||||||
if (!IS_ERR(dentry)) {
|
dentry, mode, dev->devt);
|
||||||
err = vfs_mknod(nd.path.dentry->d_inode,
|
if (!err) {
|
||||||
dentry, mode, dev->devt);
|
struct iattr newattrs;
|
||||||
if (!err) {
|
|
||||||
struct iattr newattrs;
|
|
||||||
|
|
||||||
/* fixup possibly umasked mode */
|
/* fixup possibly umasked mode */
|
||||||
newattrs.ia_mode = mode;
|
newattrs.ia_mode = mode;
|
||||||
newattrs.ia_valid = ATTR_MODE;
|
newattrs.ia_valid = ATTR_MODE;
|
||||||
mutex_lock(&dentry->d_inode->i_mutex);
|
mutex_lock(&dentry->d_inode->i_mutex);
|
||||||
notify_change(dentry, &newattrs);
|
notify_change(dentry, &newattrs);
|
||||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||||
|
|
||||||
/* mark as kernel-created inode */
|
/* mark as kernel-created inode */
|
||||||
dentry->d_inode->i_private = &thread;
|
dentry->d_inode->i_private = &thread;
|
||||||
}
|
|
||||||
dput(dentry);
|
|
||||||
} else {
|
|
||||||
err = PTR_ERR(dentry);
|
|
||||||
}
|
}
|
||||||
|
dput(dentry);
|
||||||
|
|
||||||
mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
|
mutex_unlock(&path.dentry->d_inode->i_mutex);
|
||||||
path_put(&nd.path);
|
path_put(&path);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user