Loading arch/powerpc/platforms/cell/spufs/syscalls.c +1 −3 Original line number Diff line number Diff line Loading @@ -70,9 +70,7 @@ static long do_spu_create(const char __user *pathname, unsigned int flags, ret = PTR_ERR(dentry); if (!IS_ERR(dentry)) { ret = spufs_create(&path, dentry, flags, mode, neighbor); mutex_unlock(&path.dentry->d_inode->i_mutex); dput(dentry); path_put(&path); done_path_create(&path, dentry); } return ret; Loading drivers/base/devtmpfs.c +2 −7 Original line number Diff line number Diff line Loading @@ -156,9 +156,7 @@ static int dev_mkdir(const char *name, umode_t mode) if (!err) /* mark as kernel-created inode */ dentry->d_inode->i_private = &thread; dput(dentry); mutex_unlock(&path.dentry->d_inode->i_mutex); path_put(&path); done_path_create(&path, dentry); return err; } Loading Loading @@ -218,10 +216,7 @@ static int handle_create(const char *nodename, umode_t mode, struct device *dev) /* mark as kernel-created inode */ dentry->d_inode->i_private = &thread; } dput(dentry); mutex_unlock(&path.dentry->d_inode->i_mutex); path_put(&path); done_path_create(&path, dentry); return err; } Loading fs/namei.c +12 −12 Original line number Diff line number Diff line Loading @@ -2893,6 +2893,14 @@ struct dentry *kern_path_create(int dfd, const char *pathname, struct path *path } EXPORT_SYMBOL(kern_path_create); void done_path_create(struct path *path, struct dentry *dentry) { dput(dentry); mutex_unlock(&path->dentry->d_inode->i_mutex); path_put(path); } EXPORT_SYMBOL(done_path_create); struct dentry *user_path_create(int dfd, const char __user *pathname, struct path *path, int is_dir) { char *tmp = getname(pathname); Loading Loading @@ -2989,9 +2997,7 @@ SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, umode_t, mode, out_drop_write: mnt_drop_write(path.mnt); out_dput: dput(dentry); mutex_unlock(&path.dentry->d_inode->i_mutex); path_put(&path); done_path_create(&path, dentry); return error; } Loading Loading @@ -3048,9 +3054,7 @@ SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode) out_drop_write: mnt_drop_write(path.mnt); out_dput: dput(dentry); mutex_unlock(&path.dentry->d_inode->i_mutex); path_put(&path); done_path_create(&path, dentry); return error; } Loading Loading @@ -3334,9 +3338,7 @@ SYSCALL_DEFINE3(symlinkat, const char __user *, oldname, out_drop_write: mnt_drop_write(path.mnt); out_dput: dput(dentry); mutex_unlock(&path.dentry->d_inode->i_mutex); path_put(&path); done_path_create(&path, dentry); out_putname: putname(from); return error; Loading Loading @@ -3446,9 +3448,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, out_drop_write: mnt_drop_write(new_path.mnt); out_dput: dput(new_dentry); mutex_unlock(&new_path.dentry->d_inode->i_mutex); path_put(&new_path); done_path_create(&new_path, new_dentry); out: path_put(&old_path); Loading fs/ocfs2/refcounttree.c +1 −3 Original line number Diff line number Diff line Loading @@ -4477,9 +4477,7 @@ int ocfs2_reflink_ioctl(struct inode *inode, new_dentry, preserve); mnt_drop_write(new_path.mnt); out_dput: dput(new_dentry); mutex_unlock(&new_path.dentry->d_inode->i_mutex); path_put(&new_path); done_path_create(&new_path, new_dentry); out: path_put(&old_path); Loading include/linux/namei.h +1 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ extern int kern_path(const char *, unsigned, struct path *); extern struct dentry *kern_path_create(int, const char *, struct path *, int); extern struct dentry *user_path_create(int, const char __user *, struct path *, int); extern void done_path_create(struct path *, struct dentry *); extern struct dentry *kern_path_locked(const char *, struct path *); extern int vfs_path_lookup(struct dentry *, struct vfsmount *, const char *, unsigned int, struct path *); Loading Loading
arch/powerpc/platforms/cell/spufs/syscalls.c +1 −3 Original line number Diff line number Diff line Loading @@ -70,9 +70,7 @@ static long do_spu_create(const char __user *pathname, unsigned int flags, ret = PTR_ERR(dentry); if (!IS_ERR(dentry)) { ret = spufs_create(&path, dentry, flags, mode, neighbor); mutex_unlock(&path.dentry->d_inode->i_mutex); dput(dentry); path_put(&path); done_path_create(&path, dentry); } return ret; Loading
drivers/base/devtmpfs.c +2 −7 Original line number Diff line number Diff line Loading @@ -156,9 +156,7 @@ static int dev_mkdir(const char *name, umode_t mode) if (!err) /* mark as kernel-created inode */ dentry->d_inode->i_private = &thread; dput(dentry); mutex_unlock(&path.dentry->d_inode->i_mutex); path_put(&path); done_path_create(&path, dentry); return err; } Loading Loading @@ -218,10 +216,7 @@ static int handle_create(const char *nodename, umode_t mode, struct device *dev) /* mark as kernel-created inode */ dentry->d_inode->i_private = &thread; } dput(dentry); mutex_unlock(&path.dentry->d_inode->i_mutex); path_put(&path); done_path_create(&path, dentry); return err; } Loading
fs/namei.c +12 −12 Original line number Diff line number Diff line Loading @@ -2893,6 +2893,14 @@ struct dentry *kern_path_create(int dfd, const char *pathname, struct path *path } EXPORT_SYMBOL(kern_path_create); void done_path_create(struct path *path, struct dentry *dentry) { dput(dentry); mutex_unlock(&path->dentry->d_inode->i_mutex); path_put(path); } EXPORT_SYMBOL(done_path_create); struct dentry *user_path_create(int dfd, const char __user *pathname, struct path *path, int is_dir) { char *tmp = getname(pathname); Loading Loading @@ -2989,9 +2997,7 @@ SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, umode_t, mode, out_drop_write: mnt_drop_write(path.mnt); out_dput: dput(dentry); mutex_unlock(&path.dentry->d_inode->i_mutex); path_put(&path); done_path_create(&path, dentry); return error; } Loading Loading @@ -3048,9 +3054,7 @@ SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode) out_drop_write: mnt_drop_write(path.mnt); out_dput: dput(dentry); mutex_unlock(&path.dentry->d_inode->i_mutex); path_put(&path); done_path_create(&path, dentry); return error; } Loading Loading @@ -3334,9 +3338,7 @@ SYSCALL_DEFINE3(symlinkat, const char __user *, oldname, out_drop_write: mnt_drop_write(path.mnt); out_dput: dput(dentry); mutex_unlock(&path.dentry->d_inode->i_mutex); path_put(&path); done_path_create(&path, dentry); out_putname: putname(from); return error; Loading Loading @@ -3446,9 +3448,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, out_drop_write: mnt_drop_write(new_path.mnt); out_dput: dput(new_dentry); mutex_unlock(&new_path.dentry->d_inode->i_mutex); path_put(&new_path); done_path_create(&new_path, new_dentry); out: path_put(&old_path); Loading
fs/ocfs2/refcounttree.c +1 −3 Original line number Diff line number Diff line Loading @@ -4477,9 +4477,7 @@ int ocfs2_reflink_ioctl(struct inode *inode, new_dentry, preserve); mnt_drop_write(new_path.mnt); out_dput: dput(new_dentry); mutex_unlock(&new_path.dentry->d_inode->i_mutex); path_put(&new_path); done_path_create(&new_path, new_dentry); out: path_put(&old_path); Loading
include/linux/namei.h +1 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ extern int kern_path(const char *, unsigned, struct path *); extern struct dentry *kern_path_create(int, const char *, struct path *, int); extern struct dentry *user_path_create(int, const char __user *, struct path *, int); extern void done_path_create(struct path *, struct dentry *); extern struct dentry *kern_path_locked(const char *, struct path *); extern int vfs_path_lookup(struct dentry *, struct vfsmount *, const char *, unsigned int, struct path *); Loading