Sean Hefty a396d43a35 RDMA/cma: Replace global lock in rdma_destroy_id() with id-specific one
rdma_destroy_id currently uses the global rdma cm 'lock' to test if an
rdma_cm_id has been bound to a device.  This prevents an active
address resolution callback handler from assigning a device to the
rdma_cm_id after rdma_destroy_id checks for one.

Instead, we can replace the use of the global lock around the check to
the rdma_cm_id device pointer by setting the id state to destroying,
then flushing all active callbacks.  The latter is accomplished by
acquiring and releasing the handler_mutex.  Any active handler will
complete first, and any newly scheduled handlers will find the
rdma_cm_id in an invalid state.

In addition to optimizing the current locking scheme, the use of the
rdma_cm_id mutex is a more intuitive synchronization mechanism than
that of the global lock.  These changes are based on feedback from
Doug Ledford <dledford@redhat.com> while he was trying to debug a
crash in the rdma cm destroy path.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
2011-03-15 10:57:34 -07:00
..
2010-11-24 11:41:56 -08:00
2008-07-14 23:48:44 -07:00
2011-01-16 21:16:31 -08:00
2009-01-17 17:11:57 -08:00
2011-01-16 21:16:31 -08:00
2008-07-14 23:48:44 -07:00
2006-09-22 15:22:46 -07:00
2008-07-14 23:48:44 -07:00
2010-10-13 09:38:11 -07:00
2008-07-14 23:48:44 -07:00
2010-05-25 21:10:57 -07:00
2011-01-16 21:16:31 -08:00