提交 69753a0f 编写于 作者: A Al Viro

switch devtmpfs to kern_path_create()

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 2780f1ff
...@@ -144,27 +144,21 @@ int devtmpfs_delete_node(struct device *dev) ...@@ -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 @@ static int create_path(const char *nodepath) ...@@ -203,42 +197,37 @@ static int create_path(const char *nodepath)
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 */
newattrs.ia_mode = mode;
/* fixup possibly umasked mode */ newattrs.ia_valid = ATTR_MODE;
newattrs.ia_mode = mode; mutex_lock(&dentry->d_inode->i_mutex);
newattrs.ia_valid = ATTR_MODE; notify_change(dentry, &newattrs);
mutex_lock(&dentry->d_inode->i_mutex); mutex_unlock(&dentry->d_inode->i_mutex);
notify_change(dentry, &newattrs);
mutex_unlock(&dentry->d_inode->i_mutex); /* mark as kernel-created inode */
dentry->d_inode->i_private = &thread;
/* mark as kernel-created inode */
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;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册