diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-08-28 12:52:22 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-09-26 22:20:08 -0400 |
commit | 2903ff019b346ab8d36ebbf54853c3aaf6590608 (patch) | |
tree | 962d94054765bb37bc00e977c3036e65c5fd91fe /arch | |
parent | a5b470ba06aa3f96999ede5feba178df6bdb134a (diff) |
switch simple cases of fget_light to fdget
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/alpha/kernel/osf_sys.c | 15 | ||||
-rw-r--r-- | arch/ia64/kernel/perfmon.c | 15 | ||||
-rw-r--r-- | arch/parisc/hpux/fs.c | 17 | ||||
-rw-r--r-- | arch/powerpc/platforms/cell/spu_syscalls.c | 21 |
4 files changed, 30 insertions, 38 deletions
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c index d6c49e67d3f..f1daf7ae42e 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c | |||
@@ -144,28 +144,25 @@ SYSCALL_DEFINE4(osf_getdirentries, unsigned int, fd, | |||
144 | struct osf_dirent __user *, dirent, unsigned int, count, | 144 | struct osf_dirent __user *, dirent, unsigned int, count, |
145 | long __user *, basep) | 145 | long __user *, basep) |
146 | { | 146 | { |
147 | int error, fput_needed; | 147 | int error; |
148 | struct file *file; | 148 | struct fd arg = fdget(fd); |
149 | struct osf_dirent_callback buf; | 149 | struct osf_dirent_callback buf; |
150 | 150 | ||
151 | error = -EBADF; | 151 | if (!arg.file) |
152 | file = fget_light(fd, &fput_needed); | 152 | return -EBADF; |
153 | if (!file) | ||
154 | goto out; | ||
155 | 153 | ||
156 | buf.dirent = dirent; | 154 | buf.dirent = dirent; |
157 | buf.basep = basep; | 155 | buf.basep = basep; |
158 | buf.count = count; | 156 | buf.count = count; |
159 | buf.error = 0; | 157 | buf.error = 0; |
160 | 158 | ||
161 | error = vfs_readdir(file, osf_filldir, &buf); | 159 | error = vfs_readdir(arg.file, osf_filldir, &buf); |
162 | if (error >= 0) | 160 | if (error >= 0) |
163 | error = buf.error; | 161 | error = buf.error; |
164 | if (count != buf.count) | 162 | if (count != buf.count) |
165 | error = count - buf.count; | 163 | error = count - buf.count; |
166 | 164 | ||
167 | fput_light(file, fput_needed); | 165 | fdput(arg); |
168 | out: | ||
169 | return error; | 166 | return error; |
170 | } | 167 | } |
171 | 168 | ||
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index ff5d4e4c373..e3bd7b8acea 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
@@ -4780,7 +4780,7 @@ recheck: | |||
4780 | asmlinkage long | 4780 | asmlinkage long |
4781 | sys_perfmonctl (int fd, int cmd, void __user *arg, int count) | 4781 | sys_perfmonctl (int fd, int cmd, void __user *arg, int count) |
4782 | { | 4782 | { |
4783 | struct file *file = NULL; | 4783 | struct fd f = {NULL, 0}; |
4784 | pfm_context_t *ctx = NULL; | 4784 | pfm_context_t *ctx = NULL; |
4785 | unsigned long flags = 0UL; | 4785 | unsigned long flags = 0UL; |
4786 | void *args_k = NULL; | 4786 | void *args_k = NULL; |
@@ -4789,7 +4789,6 @@ sys_perfmonctl (int fd, int cmd, void __user *arg, int count) | |||
4789 | int narg, completed_args = 0, call_made = 0, cmd_flags; | 4789 | int narg, completed_args = 0, call_made = 0, cmd_flags; |
4790 | int (*func)(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs); | 4790 | int (*func)(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs); |
4791 | int (*getsize)(void *arg, size_t *sz); | 4791 | int (*getsize)(void *arg, size_t *sz); |
4792 | int fput_needed; | ||
4793 | #define PFM_MAX_ARGSIZE 4096 | 4792 | #define PFM_MAX_ARGSIZE 4096 |
4794 | 4793 | ||
4795 | /* | 4794 | /* |
@@ -4878,17 +4877,17 @@ restart_args: | |||
4878 | 4877 | ||
4879 | ret = -EBADF; | 4878 | ret = -EBADF; |
4880 | 4879 | ||
4881 | file = fget_light(fd, &fput_needed); | 4880 | f = fdget(fd); |
4882 | if (unlikely(file == NULL)) { | 4881 | if (unlikely(f.file == NULL)) { |
4883 | DPRINT(("invalid fd %d\n", fd)); | 4882 | DPRINT(("invalid fd %d\n", fd)); |
4884 | goto error_args; | 4883 | goto error_args; |
4885 | } | 4884 | } |
4886 | if (unlikely(PFM_IS_FILE(file) == 0)) { | 4885 | if (unlikely(PFM_IS_FILE(f.file) == 0)) { |
4887 | DPRINT(("fd %d not related to perfmon\n", fd)); | 4886 | DPRINT(("fd %d not related to perfmon\n", fd)); |
4888 | goto error_args; | 4887 | goto error_args; |
4889 | } | 4888 | } |
4890 | 4889 | ||
4891 | ctx = file->private_data; | 4890 | ctx = f.file->private_data; |
4892 | if (unlikely(ctx == NULL)) { | 4891 | if (unlikely(ctx == NULL)) { |
4893 | DPRINT(("no context for fd %d\n", fd)); | 4892 | DPRINT(("no context for fd %d\n", fd)); |
4894 | goto error_args; | 4893 | goto error_args; |
@@ -4918,8 +4917,8 @@ abort_locked: | |||
4918 | if (call_made && PFM_CMD_RW_ARG(cmd) && copy_to_user(arg, args_k, base_sz*count)) ret = -EFAULT; | 4917 | if (call_made && PFM_CMD_RW_ARG(cmd) && copy_to_user(arg, args_k, base_sz*count)) ret = -EFAULT; |
4919 | 4918 | ||
4920 | error_args: | 4919 | error_args: |
4921 | if (file) | 4920 | if (f.file) |
4922 | fput_light(file, fput_needed); | 4921 | fdput(f); |
4923 | 4922 | ||
4924 | kfree(args_k); | 4923 | kfree(args_k); |
4925 | 4924 | ||
diff --git a/arch/parisc/hpux/fs.c b/arch/parisc/hpux/fs.c index 41e01832cb2..6785de7bd2a 100644 --- a/arch/parisc/hpux/fs.c +++ b/arch/parisc/hpux/fs.c | |||
@@ -109,33 +109,32 @@ Efault: | |||
109 | 109 | ||
110 | int hpux_getdents(unsigned int fd, struct hpux_dirent __user *dirent, unsigned int count) | 110 | int hpux_getdents(unsigned int fd, struct hpux_dirent __user *dirent, unsigned int count) |
111 | { | 111 | { |
112 | struct file * file; | 112 | struct fd arg; |
113 | struct hpux_dirent __user * lastdirent; | 113 | struct hpux_dirent __user * lastdirent; |
114 | struct getdents_callback buf; | 114 | struct getdents_callback buf; |
115 | int error = -EBADF, fput_needed; | 115 | int error; |
116 | 116 | ||
117 | file = fget_light(fd, &fput_needed); | 117 | arg = fdget(fd); |
118 | if (!file) | 118 | if (!arg.file) |
119 | goto out; | 119 | return -EBADF; |
120 | 120 | ||
121 | buf.current_dir = dirent; | 121 | buf.current_dir = dirent; |
122 | buf.previous = NULL; | 122 | buf.previous = NULL; |
123 | buf.count = count; | 123 | buf.count = count; |
124 | buf.error = 0; | 124 | buf.error = 0; |
125 | 125 | ||
126 | error = vfs_readdir(file, filldir, &buf); | 126 | error = vfs_readdir(arg.file, filldir, &buf); |
127 | if (error >= 0) | 127 | if (error >= 0) |
128 | error = buf.error; | 128 | error = buf.error; |
129 | lastdirent = buf.previous; | 129 | lastdirent = buf.previous; |
130 | if (lastdirent) { | 130 | if (lastdirent) { |
131 | if (put_user(file->f_pos, &lastdirent->d_off)) | 131 | if (put_user(arg.file->f_pos, &lastdirent->d_off)) |
132 | error = -EFAULT; | 132 | error = -EFAULT; |
133 | else | 133 | else |
134 | error = count - buf.count; | 134 | error = count - buf.count; |
135 | } | 135 | } |
136 | 136 | ||
137 | fput_light(file, fput_needed); | 137 | fdput(arg); |
138 | out: | ||
139 | return error; | 138 | return error; |
140 | } | 139 | } |
141 | 140 | ||
diff --git a/arch/powerpc/platforms/cell/spu_syscalls.c b/arch/powerpc/platforms/cell/spu_syscalls.c index 714bbfc3162..db4e638cf40 100644 --- a/arch/powerpc/platforms/cell/spu_syscalls.c +++ b/arch/powerpc/platforms/cell/spu_syscalls.c | |||
@@ -69,8 +69,6 @@ SYSCALL_DEFINE4(spu_create, const char __user *, name, unsigned int, flags, | |||
69 | umode_t, mode, int, neighbor_fd) | 69 | umode_t, mode, int, neighbor_fd) |
70 | { | 70 | { |
71 | long ret; | 71 | long ret; |
72 | struct file *neighbor; | ||
73 | int fput_needed; | ||
74 | struct spufs_calls *calls; | 72 | struct spufs_calls *calls; |
75 | 73 | ||
76 | calls = spufs_calls_get(); | 74 | calls = spufs_calls_get(); |
@@ -78,11 +76,11 @@ SYSCALL_DEFINE4(spu_create, const char __user *, name, unsigned int, flags, | |||
78 | return -ENOSYS; | 76 | return -ENOSYS; |
79 | 77 | ||
80 | if (flags & SPU_CREATE_AFFINITY_SPU) { | 78 | if (flags & SPU_CREATE_AFFINITY_SPU) { |
79 | struct fd neighbor = fdget(neighbor_fd); | ||
81 | ret = -EBADF; | 80 | ret = -EBADF; |
82 | neighbor = fget_light(neighbor_fd, &fput_needed); | 81 | if (neighbor.file) { |
83 | if (neighbor) { | 82 | ret = calls->create_thread(name, flags, mode, neighbor.file); |
84 | ret = calls->create_thread(name, flags, mode, neighbor); | 83 | fdput(neighbor); |
85 | fput_light(neighbor, fput_needed); | ||
86 | } | 84 | } |
87 | } else | 85 | } else |
88 | ret = calls->create_thread(name, flags, mode, NULL); | 86 | ret = calls->create_thread(name, flags, mode, NULL); |
@@ -94,8 +92,7 @@ SYSCALL_DEFINE4(spu_create, const char __user *, name, unsigned int, flags, | |||
94 | asmlinkage long sys_spu_run(int fd, __u32 __user *unpc, __u32 __user *ustatus) | 92 | asmlinkage long sys_spu_run(int fd, __u32 __user *unpc, __u32 __user *ustatus) |
95 | { | 93 | { |
96 | long ret; | 94 | long ret; |
97 | struct file *filp; | 95 | struct fd arg; |
98 | int fput_needed; | ||
99 | struct spufs_calls *calls; | 96 | struct spufs_calls *calls; |
100 | 97 | ||
101 | calls = spufs_calls_get(); | 98 | calls = spufs_calls_get(); |
@@ -103,10 +100,10 @@ asmlinkage long sys_spu_run(int fd, __u32 __user *unpc, __u32 __user *ustatus) | |||
103 | return -ENOSYS; | 100 | return -ENOSYS; |
104 | 101 | ||
105 | ret = -EBADF; | 102 | ret = -EBADF; |
106 | filp = fget_light(fd, &fput_needed); | 103 | arg = fdget(fd); |
107 | if (filp) { | 104 | if (arg.file) { |
108 | ret = calls->spu_run(filp, unpc, ustatus); | 105 | ret = calls->spu_run(arg.file, unpc, ustatus); |
109 | fput_light(filp, fput_needed); | 106 | fdput(arg); |
110 | } | 107 | } |
111 | 108 | ||
112 | spufs_calls_put(calls); | 109 | spufs_calls_put(calls); |