Loading drivers/base/devtmpfs.c +36 −47 Original line number 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) { 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; } 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) { 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; Loading @@ -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; } Loading Loading
drivers/base/devtmpfs.c +36 −47 Original line number 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) { 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; } 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) { 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; Loading @@ -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; } Loading