Re: [PATCH 0/6] iser-target: Fix active I/O shutdown related issues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2014-03-06 at 16:05 +0200, sagi grimberg wrote:
> On 3/6/2014 12:04 AM, Nicholas A. Bellinger wrote:
> > On Wed, 2014-03-05 at 14:12 +0200, Sagi Grimberg wrote:
> >> On 3/5/2014 2:06 AM, Nicholas A. Bellinger wrote:
> >>> On Tue, 2014-03-04 at 17:17 +0200, Sagi Grimberg wrote:
> >>>> On 3/4/2014 2:00 AM, Nicholas A. Bellinger wrote:

<SNIP>

> >>> <nod>, I noticed that as well during recent debugging.
> >>>
> >>> However, AFAICT the RDMA_CM_EVENT_TIMEWAIT_EVENT doesn't (always) occur
> >>> on the target side after a RDMA_CM_EVENT_DISCONNECTED, and thus far I've
> >>> not been able to ascertain what's different about the shutdown sequence
> >>> that would make this happen, or not happen..
> >>>
> >>> Any ideas..?
> >> That's probably because the cm_id is destroyed before you get the event.
> >> There is a specific
> >> timout computation to get this event (see IB spec). If you will attempt
> >> to disconnect while
> >> the link is down (initiator won't receive it and send you disconnect
> >> back), you should be able
> >> to see this event. As I understand, in order to comply the spec, the QP
> >> (and the cm_id afterwards)
> >> should be destroyed only when getting this event and not before.
> >>
> > <nod>, thanks for the additional background.
> >
> > So currently rdma_destroy_qp() + rdma_destroy_id() is being done via
> > isert_connect_release(), which occurs after the final isert_put_conn()
> > happens from either the RDMA_CM_EVENT_DISCONNECTED handler, or within
> > isert_free_conn() in one of the per connection kernel thread contexts
> > via iscsit_close_connection().
> >
> > If I understand the above correctly, the isert_put_conn() should move
> > from the RDMA_CM_EVENT_DISCONNECTED handler into the TIMEWAIT_EVENT
> > handler, yes..?
> 
> Yes.
> 
> > And it's safe to assume that DISCONNECTED will always occur before
> > TIMEWAIT_EVENT, right..?
> 
> DISCONNECTED event may not even come at all (in case the initiator 
> didn't call rdma_disconnect). no guarantees here..
> But, if once we get the TIMEWAIT event, we destroy the qp and the 
> *cm_id*, we won't get any CM events at all.
> As I understand, we don't even need to explicitly destroy the cm_id, we 
> can just return a non-zero return from cma_handler
> for TIMEWAIT events which will cause rdma_cm to implicitly destroy the 
> cm_id.
> 

Mmmm, if that's the case then I'm more confused about how reference
counting for isert_conn should work wrt TIMEWAIT_EVENT than before..  ;)

As mentioned earlier, the first isert_put_conn() occurs from the per
connection process context after calling rdma_disconnect(), and the
second from the disconnected event handler.

Your comment above would seem to indicate that iser-target code should
be waiting to receive TIMEWAIT_EVENT, instead of pro-actively calling
rdma_disconnect() to trigger the disconnect.  Is that correct..?

--nab

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux