On Mon, 1 Nov 2004 16:12:18 -0800 (PST) Krishna Kumar <[EMAIL PROTECTED]> wrote:
> I believe the recent changes to catch all atomic_dec races with > unregister failed to catch one spot in ib_post_send_mad. This routine > increments mad_agent_priv->refcnt, and while unregister can run, if > the ib_send_mad() fails, we drop the refcnt without checking if the > refcnt has dropped to zero. The unregister would block indefinitely > waiting to be woken up. I think the rest of the atomic_dec's looks > good though. I looked at this area of the code, and my thought was that we cannot handle a client that tries to send a MAD at the same time that they unregister. So, I think that a simple atomic_dec should be okay. If a client is calling unregister in a separate thread, then they are essentially trying to send a MAD after unregistering, in which case our data structures have been freed. - Sean > *bad_send_wr = cur_send_wr; > - atomic_dec(&mad_agent_priv->refcount); > + if (atomic_dec_and_test(&mad_agent_priv->refcount)) > + wake_up(&mad_agent_priv->wait); > return ret; > } _______________________________________________ openib-general mailing list [EMAIL PROTECTED] http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
