aboutsummaryrefslogtreecommitdiffstats
path: root/fs/pipe.c
diff options
context:
space:
mode:
authorJulia Lawall <julia@diku.dk>2010-05-26 11:54:39 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2010-05-27 22:03:09 -0400
commitcc967be54710d97c05229b2e5ba2d00df84ddd64 (patch)
treef2b5f79ee07f16abe92f27c6663dea4339d2f437 /fs/pipe.c
parentea635c64e007061f6468ece5cc9cc62d41d4ecf2 (diff)
fs: Add missing mutex_unlock
Add a mutex_unlock missing on the error path. At other exists from the function that return an error flag, the mutex is unlocked, so do the same here. The semantic match that finds this problem is as follows: (http://coccinelle.lip6.fr/) // <smpl> @@ expression E1; @@ * mutex_lock(E1,...); <+... when != E1 if (...) { ... when != E1 * return ...; } ...+> * mutex_unlock(E1,...); // </smpl> Signed-off-by: Julia Lawall <julia@diku.dk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/pipe.c')
-rw-r--r--fs/pipe.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/fs/pipe.c b/fs/pipe.c
index d79872eba09..60da077400f 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -1169,14 +1169,18 @@ long pipe_fcntl(struct file *file, unsigned int cmd, unsigned long arg)
1169 1169
1170 switch (cmd) { 1170 switch (cmd) {
1171 case F_SETPIPE_SZ: 1171 case F_SETPIPE_SZ:
1172 if (!capable(CAP_SYS_ADMIN) && arg > pipe_max_pages) 1172 if (!capable(CAP_SYS_ADMIN) && arg > pipe_max_pages) {
1173 return -EINVAL; 1173 ret = -EINVAL;
1174 goto out;
1175 }
1174 /* 1176 /*
1175 * The pipe needs to be at least 2 pages large to 1177 * The pipe needs to be at least 2 pages large to
1176 * guarantee POSIX behaviour. 1178 * guarantee POSIX behaviour.
1177 */ 1179 */
1178 if (arg < 2) 1180 if (arg < 2) {
1179 return -EINVAL; 1181 ret = -EINVAL;
1182 goto out;
1183 }
1180 ret = pipe_set_size(pipe, arg); 1184 ret = pipe_set_size(pipe, arg);
1181 break; 1185 break;
1182 case F_GETPIPE_SZ: 1186 case F_GETPIPE_SZ:
@@ -1187,6 +1191,7 @@ long pipe_fcntl(struct file *file, unsigned int cmd, unsigned long arg)
1187 break; 1191 break;
1188 } 1192 }
1189 1193
1194out:
1190 mutex_unlock(&pipe->inode->i_mutex); 1195 mutex_unlock(&pipe->inode->i_mutex);
1191 return ret; 1196 return ret;
1192} 1197}