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