Le jeudi 05 février 2015 à 13:53 +0200, Or Gerlitz a écrit :
> From: Moshe Lazer <[email protected]>
> 
> The deadlock occurs on __uverbs_modify_qp, we take a lock (idr_read_qp)
> and in case of failure in ib_resolve_eth_l2_attrs we don't release
> it (put_qp_read). Fix that.
> 
> Issue: 355606
 ^^^^^^^^^^^^^^
I'm not sure this is relevant

> Fixes: ed4c54e5b4ba ("IB/core: Resolve Ethernet L2 addresses when modifying 
> QP")
> Signed-off-by: Moshe Lazer <[email protected]>
> Signed-off-by: Or Gerlitz <[email protected]>
> ---
>  drivers/infiniband/core/uverbs_cmd.c |    9 +++++----
>  1 files changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/infiniband/core/uverbs_cmd.c 
> b/drivers/infiniband/core/uverbs_cmd.c
> index ecb6430..a602ce9 100644
> --- a/drivers/infiniband/core/uverbs_cmd.c
> +++ b/drivers/infiniband/core/uverbs_cmd.c
> @@ -2097,20 +2097,21 @@ ssize_t ib_uverbs_modify_qp(struct ib_uverbs_file 
> *file,
>       if (qp->real_qp == qp) {
>               ret = ib_resolve_eth_l2_attrs(qp, attr, &cmd.attr_mask);
>               if (ret)
> -                     goto out;
> +                     goto release_qp;
>               ret = qp->device->modify_qp(qp, attr,
>                       modify_qp_mask(qp->qp_type, cmd.attr_mask), &udata);
>       } else {
>               ret = ib_modify_qp(qp, attr, modify_qp_mask(qp->qp_type, 
> cmd.attr_mask));
>       }
>  
> -     put_qp_read(qp);
> -
>       if (ret)
> -             goto out;
> +             goto release_qp;
>  
>       ret = in_len;
>  
> +release_qp:
> +     put_qp_read(qp);
> +
>  out:
>       kfree(attr);
>  

Regards.

-- 
Yann Droneaud
OPTEYA


--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to