Skip to content

Commit

Permalink
fs: Add missing mutex_unlock
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Julia Lawall authored and Al Viro committed May 28, 2010
1 parent ea635c6 commit cc967be
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions fs/pipe.c
Original file line number Diff line number Diff line change
Expand Up @@ -1169,14 +1169,18 @@ long pipe_fcntl(struct file *file, unsigned int cmd, unsigned long arg)

switch (cmd) {
case F_SETPIPE_SZ:
if (!capable(CAP_SYS_ADMIN) && arg > pipe_max_pages)
return -EINVAL;
if (!capable(CAP_SYS_ADMIN) && arg > pipe_max_pages) {
ret = -EINVAL;
goto out;
}
/*
* The pipe needs to be at least 2 pages large to
* guarantee POSIX behaviour.
*/
if (arg < 2)
return -EINVAL;
if (arg < 2) {
ret = -EINVAL;
goto out;
}
ret = pipe_set_size(pipe, arg);
break;
case F_GETPIPE_SZ:
Expand All @@ -1187,6 +1191,7 @@ long pipe_fcntl(struct file *file, unsigned int cmd, unsigned long arg)
break;
}

out:
mutex_unlock(&pipe->inode->i_mutex);
return ret;
}
Expand Down

0 comments on commit cc967be

Please sign in to comment.