On Sun, Jul 24, 2011 at 9:43 PM,  <rpear...@systemfabricworks.com> wrote:
> +int rxe_mcast_drop_grp_elem(struct rxe_dev *rxe, struct rxe_qp *qp,
> +                         union ib_gid *mgid, u16 mlid)
> +{
> +     struct rxe_mc_grp *grp;
> +     struct rxe_mc_elem *elem, *tmp;
> +
> +     grp = rxe_pool_get_key(&rxe->mc_grp_pool, mgid);
> +     if (!grp)
> +             goto err1;
> +
> +     spin_lock_bh(&qp->grp_lock);
> +     spin_lock_bh(&grp->mcg_lock);
> +
> +     list_for_each_entry_safe(elem, tmp, &grp->qp_list, qp_list) {
> +             if (elem->qp == qp) {
> +                     list_del(&elem->qp_list);
> +                     list_del(&elem->grp_list);
> +                     grp->num_qp--;
> +
> +                     spin_unlock_bh(&grp->mcg_lock);
> +                     spin_unlock_bh(&qp->grp_lock);
> +                     rxe_drop_ref(elem);
> +                     rxe_drop_ref(grp);      /* ref held by QP */
> +                     rxe_drop_ref(grp);      /* ref from get_key */
> +                     return 0;
> +             }
> +     }

The above loop is left after a match has been found. Do we really need
list_for_each_entry_safe() here ?

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

Reply via email to