Loading drivers/base/devtmpfs.c +36 −47 Original line number Original line Diff line number Diff line Loading @@ -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)) { err = vfs_mkdir(nd.path.dentry->d_inode, dentry, mode); if (!err) if (!err) /* mark as kernel-created inode */ /* mark as kernel-created inode */ dentry->d_inode->i_private = &thread; dentry->d_inode->i_private = &thread; dput(dentry); dput(dentry); } else { mutex_unlock(&path.dentry->d_inode->i_mutex); err = PTR_ERR(dentry); path_put(&path); } mutex_unlock(&nd.path.dentry->d_inode->i_mutex); path_put(&nd.path); return err; return err; } } Loading Loading @@ -203,21 +197,19 @@ 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)) { err = vfs_mknod(nd.path.dentry->d_inode, dentry, mode, dev->devt); dentry, mode, dev->devt); if (!err) { if (!err) { struct iattr newattrs; struct iattr newattrs; Loading @@ -233,12 +225,9 @@ static int handle_create(const char *nodename, mode_t mode, struct device *dev) dentry->d_inode->i_private = &thread; dentry->d_inode->i_private = &thread; } } dput(dentry); dput(dentry); } else { err = PTR_ERR(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 Loading
drivers/base/devtmpfs.c +36 −47 Original line number Original line Diff line number Diff line Loading @@ -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)) { err = vfs_mkdir(nd.path.dentry->d_inode, dentry, mode); if (!err) if (!err) /* mark as kernel-created inode */ /* mark as kernel-created inode */ dentry->d_inode->i_private = &thread; dentry->d_inode->i_private = &thread; dput(dentry); dput(dentry); } else { mutex_unlock(&path.dentry->d_inode->i_mutex); err = PTR_ERR(dentry); path_put(&path); } mutex_unlock(&nd.path.dentry->d_inode->i_mutex); path_put(&nd.path); return err; return err; } } Loading Loading @@ -203,21 +197,19 @@ 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)) { err = vfs_mknod(nd.path.dentry->d_inode, dentry, mode, dev->devt); dentry, mode, dev->devt); if (!err) { if (!err) { struct iattr newattrs; struct iattr newattrs; Loading @@ -233,12 +225,9 @@ static int handle_create(const char *nodename, mode_t mode, struct device *dev) dentry->d_inode->i_private = &thread; dentry->d_inode->i_private = &thread; } } dput(dentry); dput(dentry); } else { err = PTR_ERR(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