diff options
Diffstat (limited to 'arch/powerpc/platforms/cell/spufs/syscalls.c')
-rw-r--r-- | arch/powerpc/platforms/cell/spufs/syscalls.c | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/arch/powerpc/platforms/cell/spufs/syscalls.c b/arch/powerpc/platforms/cell/spufs/syscalls.c index a3d2ce54ea2..609e016e92d 100644 --- a/arch/powerpc/platforms/cell/spufs/syscalls.c +++ b/arch/powerpc/platforms/cell/spufs/syscalls.c | |||
@@ -62,21 +62,17 @@ out: | |||
62 | static long do_spu_create(const char __user *pathname, unsigned int flags, | 62 | static long do_spu_create(const char __user *pathname, unsigned int flags, |
63 | mode_t mode, struct file *neighbor) | 63 | mode_t mode, struct file *neighbor) |
64 | { | 64 | { |
65 | char *tmp; | 65 | struct path path; |
66 | struct dentry *dentry; | ||
66 | int ret; | 67 | int ret; |
67 | 68 | ||
68 | tmp = getname(pathname); | 69 | dentry = user_path_create(AT_FDCWD, pathname, &path, 1); |
69 | ret = PTR_ERR(tmp); | 70 | ret = PTR_ERR(dentry); |
70 | if (!IS_ERR(tmp)) { | 71 | if (!IS_ERR(dentry)) { |
71 | struct nameidata nd; | 72 | ret = spufs_create(&path, dentry, flags, mode, neighbor); |
72 | 73 | mutex_unlock(&path.dentry->d_inode->i_mutex); | |
73 | ret = kern_path_parent(tmp, &nd); | 74 | dput(dentry); |
74 | if (!ret) { | 75 | path_put(&path); |
75 | nd.flags |= LOOKUP_OPEN | LOOKUP_CREATE; | ||
76 | ret = spufs_create(&nd, flags, mode, neighbor); | ||
77 | path_put(&nd.path); | ||
78 | } | ||
79 | putname(tmp); | ||
80 | } | 76 | } |
81 | 77 | ||
82 | return ret; | 78 | return ret; |