[ewg] [PATCHv8 04/11] ib_core: IBoE CMA device binding
Eli Cohen
eli at dev.mellanox.co.il
Thu May 13 01:26:13 PDT 2010
On Wed, May 12, 2010 at 01:05:06PM -0700, Roland Dreier wrote:
> > +static void iboe_mcast_work_handler(struct work_struct *work)
> > +{
> > + struct iboe_mcast_work *mw = container_of(work, struct iboe_mcast_work, work);
> > + struct cma_multicast *mc = mw->mc;
> > + struct ib_sa_multicast *m = mc->multicast.ib;
> > +
> > + mc->multicast.ib->context = mc;
> > + cma_ib_mc_handler(0, m);
> > + kref_put(&mc->mcref, release_mc);
> > + kfree(mw);
> > +}
>
> I'm having a hard time working out why the iboe case needs to schedule
> to a work queue here since its already in process context, right? It
> seems it would be really preferable to avoid all the extra pointer
> munging and reference counting, and just call things directly.
>
I assume that the caller might attempt to acquire the same lock when
calling join and in the callback. Specifically, ucma_join_multicast()
calls rdma_join_multicast() with file->mut acquired and
ucma_event_handler() does the same.
More information about the ewg
mailing list