Files
linux/include/linux
Eric Dumazet 0287587884 net: better IFF_XMIT_DST_RELEASE support
Testing xmit_more support with netperf and connected UDP sockets,
I found strange dst refcount false sharing.

Current handling of IFF_XMIT_DST_RELEASE is not optimal.

Dropping dst in validate_xmit_skb() is certainly too late in case
packet was queued by cpu X but dequeued by cpu Y

The logical point to take care of drop/force is in __dev_queue_xmit()
before even taking qdisc lock.

As Julian Anastasov pointed out, need for skb_dst() might come from some
packet schedulers or classifiers.

This patch adds new helper to cleanly express needs of various drivers
or qdiscs/classifiers.

Drivers that need skb_dst() in their ndo_start_xmit() should call
following helper in their setup instead of the prior :

	dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
->
	netif_keep_dst(dev);

Instead of using a single bit, we use two bits, one being
eventually rebuilt in bonding/team drivers.

The other one, is permanent and blocks IFF_XMIT_DST_RELEASE being
rebuilt in bonding/team. Eventually, we could add something
smarter later.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Julian Anastasov <ja@ssi.bg>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-10-07 13:22:11 -04:00
..
2014-05-06 17:54:53 -04:00
2014-09-26 15:05:15 -04:00
2014-08-01 22:35:55 +08:00
2014-07-08 13:36:52 -07:00
2014-06-26 15:46:55 -03:00
2014-08-22 13:56:47 -07:00
2014-09-26 15:05:15 -04:00
2014-08-07 14:40:08 -04:00
2014-04-18 14:20:48 +02:00
2014-08-06 18:01:24 -07:00
2014-05-20 10:30:40 +09:00
2014-08-06 18:01:19 -07:00
2014-09-25 16:07:15 +02:00
2014-06-06 16:08:13 -07:00
2014-09-29 15:37:01 -04:00
2014-06-02 14:56:01 -07:00
2014-07-08 09:40:06 +02:00
2014-04-17 12:30:40 -07:00
2014-06-16 16:26:54 +02:00
2014-07-22 21:55:45 +01:00
2014-05-27 17:38:11 -07:00
2014-07-17 22:07:37 +02:00
2014-07-09 14:58:37 +01:00
2014-06-04 16:54:07 -07:00
2014-06-04 16:54:21 -07:00
2014-07-15 22:40:22 +02:00
2014-06-04 16:54:12 -07:00
2014-09-13 12:30:26 -04:00
2014-08-08 15:57:26 -07:00
2014-08-08 15:57:31 -07:00
2014-08-06 13:03:44 +02:00
2014-06-12 00:21:11 -04:00
2014-08-08 15:57:17 -07:00
2014-06-04 16:53:57 -07:00
2014-08-08 15:57:24 -07:00
2014-08-22 21:28:02 -07:00
2014-06-04 16:53:56 -07:00
2014-05-14 09:46:32 -07:00
2014-08-08 15:57:22 -07:00
2014-09-16 15:02:55 -06:00
2014-06-04 16:53:57 -07:00
2014-06-04 16:53:57 -07:00