From: Julia Lawall <[email protected]>
The mutex is released on a successful return, so it would seem that it
should be released on an error return as well.
The semantic patch that makes this change is as follows:
(http://www.emn.fr/x-info/coccinelle/)
// <smpl>
@@
expression l;
@@
mutex_lock(l);
... when != mutex_unlock(l)
when any
when strict
(
if (...) { ... when != mutex_unlock(l)
+ mutex_unlock(l);
return ...;
}
|
mutex_unlock(l);
)
// </smpl>
Signed-off-by: Julia Lawall <[email protected]>
---
diff -u -p a/drivers/infiniband/hw/ehca/ipz_pt_fn.c b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
--- a/drivers/infiniband/hw/ehca/ipz_pt_fn.c
+++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
@@ -163,6 +163,7 @@ static int alloc_small_queue_page(struct
out:
ehca_err(pd->ib_pd.device, "failed to allocate small queue page");
+ mutex_unlock(&pd->lock);
return 0;
}
> --- a/drivers/infiniband/hw/ehca/ipz_pt_fn.c
> +++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
> @@ -163,6 +163,7 @@ static int alloc_small_queue_page(struct
>
> out:
> ehca_err(pd->ib_pd.device, "failed to allocate small queue page");
> + mutex_unlock(&pd->lock);
> return 0;
> }
Thanks, looks obviously correct. ehca guys, I will queue this for my
next pull request to Linus; please let me know if you see a problem and
want me to drop it.
- R.
Roland and Julia,
Looks good to me. Thanks for pointing this out.
Nam
Roland Dreier <[email protected]> wrote on 21.07.2008 18:25:07:
> > --- a/drivers/infiniband/hw/ehca/ipz_pt_fn.c
> > +++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
> > @@ -163,6 +163,7 @@ static int alloc_small_queue_page(struct
> >
> > out:
> > ehca_err(pd->ib_pd.device, "failed to allocate small queue page");
> > + mutex_unlock(&pd->lock);
> > return 0;
> > }
>
> Thanks, looks obviously correct. ehca guys, I will queue this for my
> next pull request to Linus; please let me know if you see a problem and
> want me to drop it.
>
> - R.