linux-stable/drivers/infiniband/ulp
Roland Dreier b13912bbb4 IPoIB: Call skb_dst_drop() once skb is enqueued for sending
Currently, IPoIB delays collecting send completions for TX packets in
order to batch work more efficiently.  It does skb_orphan() right after
queuing the packets so that destructors run early, to avoid problems
like holding socket send buffers for too long (since we might not
collect a send completion until a long time after the packet is
actually sent).

However, IPoIB clears IFF_XMIT_DST_RELEASE because it actually looks
at skb_dst() to update the PMTU when it gets a too-long packet.  This
means that the packets sitting in the TX ring with uncollected send
completions are holding a reference on the dst.  We've seen this lead
to pathological behavior with respect to route and neighbour GC.  The
easy fix for this is to call skb_dst_drop() when we call skb_orphan().

Also, give packets sent via connected mode (CM) the same skb_orphan()
/ skb_dst_drop() treatment that packets sent via datagram mode get.

Signed-off-by: Roland Dreier <roland@purestorage.com>
2012-12-19 09:16:43 -08:00
..
ipoib IPoIB: Call skb_dst_drop() once skb is enqueued for sending 2012-12-19 09:16:43 -08:00
iser IB/iser: Add more RX CQs to scale out processing of SCSI responses 2012-10-03 21:26:49 -07:00
srp IB/srp: Allow SRP disconnect through sysfs 2012-11-30 17:40:33 -08:00
srpt ib_srpt: Convert TMR path to target_submit_tmr 2012-11-28 11:20:28 -08:00