[ofa-general] Re: [PATCH 2.6.24] rdma/cm: fix deadlock destroyinglisten requests

Kanoj Sarcar kanoj at netxen.com
Wed Oct 10 17:03:20 PDT 2007


Sean Hefty wrote:

>>I don't understand your response. ucma.c for example can call
>>rdma_create_id() and rdma_destroy_id(), correct? What says that when
>>ucma.c does a rdma_destroy_id() on a nonwildcard listener, a device
>>removal is not attempting to do the same on the listener? If this is
>>possible, the code paths I mentioned above can still trigger a double
>>destruct on a listener, correct?
>>    
>>
>
>Device removal only automatically destroys internal listens, and a non-wildcard
>listen would never generate an internal listen.  Internal listens are used to
>  
>
Oh, ok.

I must be missing something though. cma_process_remove() goes thru the 
device's id_list, and non-wildcard listeners do show up on this list 
(say thru rdma_bind_addr() -> cma_acquire_dev() -> cma_attach_to_dev()). 
So, cma_process_remove() would end up attempting a rdma_destroy_id(), no?

Wait, I see ... cma_remove_id_dev() would return 0 from the 
event_handler, ensuring cma_process_remove() does not invoke 
rdma_destroy_id(), is that it?

Kanoj

>map wildcard listens across multiple RDMA devices.  Their creation and
>destruction is contained to the cma.  From the viewpoint of the device removal
>code, a nonwildcard listen is treated the same as a connected id.
>
>The ucma only destroys id's from an event callback if the id is for a new
>connection which it can't handle.
>
>Hope this makes sense.
>
>- Sean
>
>  
>




More information about the general mailing list