diff options
author | Roland Dreier <roland@purestorage.com> | 2012-12-19 09:16:43 -0800 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2012-12-19 09:16:43 -0800 |
commit | b13912bbb4a2d445c35db24586eb6ecf4707d52d (patch) | |
tree | 1cd9be4af43845b21861384e66d93e9d71f690b2 /drivers/scsi/arm | |
parent | 5bd665f28db2b04a8d6fe277342479906fc60b62 (diff) | |
download | op-kernel-dev-b13912bbb4a2d445c35db24586eb6ecf4707d52d.zip op-kernel-dev-b13912bbb4a2d445c35db24586eb6ecf4707d52d.tar.gz |
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>
Diffstat (limited to 'drivers/scsi/arm')
0 files changed, 0 insertions, 0 deletions