summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2017-08-07 09:16:16 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2017-08-09 09:09:39 -0400
commit307957b643493c1bc038d4e4b717871184f13ddf (patch)
treeabca2d2a1d79b8879e73ac87995d68a7b7572dca
parent4ae48c046814d8b0386883aeb9060b08f46a2ec1 (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.c26
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,
199static long vmcp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 199static 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
238static const struct file_operations vmcp_fops = { 236static const struct file_operations vmcp_fops = {