diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2017-08-07 09:16:16 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2017-08-09 09:09:39 -0400 |
commit | 307957b643493c1bc038d4e4b717871184f13ddf (patch) | |
tree | abca2d2a1d79b8879e73ac87995d68a7b7572dca | |
parent | 4ae48c046814d8b0386883aeb9060b08f46a2ec1 (diff) |
s390/vmcp: simplify vmcp_ioctl()
vmcp_ioctl() has many different return statements and duplicates a lot
of mutex_unlock() calls. Simplify this so that only one return
statement and one mutex_unlock() call is left.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r-- | drivers/s390/char/vmcp.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/drivers/s390/char/vmcp.c b/drivers/s390/char/vmcp.c index 30fd474c86b3..0aa50afa5063 100644 --- a/drivers/s390/char/vmcp.c +++ b/drivers/s390/char/vmcp.c | |||
@@ -199,8 +199,8 @@ vmcp_write(struct file *file, const char __user *buff, size_t count, | |||
199 | static long vmcp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | 199 | static long vmcp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
200 | { | 200 | { |
201 | struct vmcp_session *session; | 201 | struct vmcp_session *session; |
202 | int ret = -ENOTTY; | ||
202 | int __user *argp; | 203 | int __user *argp; |
203 | int temp; | ||
204 | 204 | ||
205 | session = file->private_data; | 205 | session = file->private_data; |
206 | if (is_compat_task()) | 206 | if (is_compat_task()) |
@@ -211,28 +211,26 @@ static long vmcp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
211 | return -ERESTARTSYS; | 211 | return -ERESTARTSYS; |
212 | switch (cmd) { | 212 | switch (cmd) { |
213 | case VMCP_GETCODE: | 213 | case VMCP_GETCODE: |
214 | temp = session->resp_code; | 214 | ret = put_user(session->resp_code, argp); |
215 | mutex_unlock(&session->mutex); | 215 | break; |
216 | return put_user(temp, argp); | ||
217 | case VMCP_SETBUF: | 216 | case VMCP_SETBUF: |
218 | vmcp_response_free(session); | 217 | vmcp_response_free(session); |
219 | temp = get_user(session->bufsize, argp); | 218 | ret = get_user(session->bufsize, argp); |
220 | if (temp) | 219 | if (ret) |
221 | session->bufsize = PAGE_SIZE; | 220 | session->bufsize = PAGE_SIZE; |
222 | if (!session->bufsize || get_order(session->bufsize) > 8) { | 221 | if (!session->bufsize || get_order(session->bufsize) > 8) { |
223 | session->bufsize = PAGE_SIZE; | 222 | session->bufsize = PAGE_SIZE; |
224 | temp = -EINVAL; | 223 | ret = -EINVAL; |
225 | } | 224 | } |
226 | mutex_unlock(&session->mutex); | 225 | break; |
227 | return temp; | ||
228 | case VMCP_GETSIZE: | 226 | case VMCP_GETSIZE: |
229 | temp = session->resp_size; | 227 | ret = put_user(session->resp_size, argp); |
230 | mutex_unlock(&session->mutex); | 228 | break; |
231 | return put_user(temp, argp); | ||
232 | default: | 229 | default: |
233 | mutex_unlock(&session->mutex); | 230 | break; |
234 | return -ENOTTY; | ||
235 | } | 231 | } |
232 | mutex_unlock(&session->mutex); | ||
233 | return ret; | ||
236 | } | 234 | } |
237 | 235 | ||
238 | static const struct file_operations vmcp_fops = { | 236 | static const struct file_operations vmcp_fops = { |