uverbs: fix reference counting in error handling.

Signed-off-by: Jack Morgenstein <[EMAIL PROTECTED]>
Signed-off-by: Michael S. Tsirkin <[EMAIL PROTECTED]>

Index: linux-kernel/drivers/infiniband/core/uverbs_cmd.c
===================================================================
--- linux-kernel/drivers/infiniband/core/uverbs_cmd.c   (revision 4611)
+++ linux-kernel/drivers/infiniband/core/uverbs_cmd.c   (working copy)
@@ -488,6 +488,7 @@ err_idr:
        idr_remove(&ib_uverbs_mr_idr, obj->uobject.id);
 
 err_unreg:
+       atomic_dec(&pd->usecnt);
        ib_dereg_mr(mr);
 
 err_up:
@@ -934,6 +935,11 @@ err_idr:
        idr_remove(&ib_uverbs_qp_idr, uobj->uevent.uobject.id);
 
 err_destroy:
+       atomic_dec(&pd->usecnt);
+       atomic_dec(&attr.send_cq->usecnt);
+       atomic_dec(&attr.recv_cq->usecnt);
+       if (attr.srq)
+               atomic_dec(&attr.srq->usecnt);
        ib_destroy_qp(qp);
 
 err_up:
@@ -1728,6 +1734,7 @@ err_idr:
        idr_remove(&ib_uverbs_srq_idr, uobj->uobject.id);
 
 err_destroy:
+       atomic_dec(&pd->usecnt);
        ib_destroy_srq(srq);
 
 err_up:

-- 
MST
_______________________________________________
openib-general mailing list
openib-general@openib.org
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to