linux/net
Eric Dumazet 6ffe75eb53 net: avoid two atomic operations in fast clones
Commit ce1a4ea3f1 ("net: avoid one atomic operation in skb_clone()")
took the wrong way to save one atomic operation.

It is actually possible to avoid two atomic operations, if we
do not change skb->fclone values, and only rely on clone_ref
content to signal if the clone is available or not.

skb_clone() can simply use the fast clone if clone_ref is 1.

kfree_skbmem() can avoid the atomic_dec_and_test() if clone_ref is 1.

Note that because we usually free the clone before the original skb,
this particular attempt is only done for the original skb to have better
branch prediction.

SKB_FCLONE_FREE is removed.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Chris Mason <clm@fb.com>
Cc: Sabrina Dubroca <sd@queasysnail.net>
Cc: Vijay Subramanian <subramanian.vijay@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-12-09 13:40:20 -05:00
..
6lowpan 6lowpan: move skb_free from error paths in decompression 2014-11-06 22:09:48 +01:00
9p 9p/trans_virtio: enable VQs early 2014-10-15 10:25:04 +10:30
802 net: set name_assign_type in alloc_netdev() 2014-07-15 16:12:48 -07:00
8021q vlan: Pass ethtool get_ts_info queries to real device. 2014-11-21 15:35:53 -05:00
appletalk new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
atm [atm] switch vcc_sendmsg() to copy_from_iter() 2014-11-24 05:16:42 -05:00
ax25 new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
batman-adv batman-adv: replace strnicmp with strncasecmp 2014-10-14 02:18:24 +02:00
bluetooth new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
bridge Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next 2014-12-05 20:56:46 -08:00
caif new helper: memcpy_to_msg() 2014-11-24 04:28:51 -05:00
can new helper: memcpy_to_msg() 2014-11-24 04:28:51 -05:00
ceph libceph: change from BUG to WARN for __remove_osd() asserts 2014-11-13 22:26:34 +03:00
core net: avoid two atomic operations in fast clones 2014-12-09 13:40:20 -05:00
dcb dcbnl : Disable software interrupts before taking dcb_lock 2014-11-16 14:50:52 -05:00
dccp new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
decnet new helper: memcpy_to_msg() 2014-11-24 04:28:51 -05:00
dns_resolver Merge commit 'v3.16' into next 2014-10-01 00:44:04 +10:00
dsa net: dsa: replace count*size kzalloc by kcalloc 2014-11-16 14:41:39 -05:00
ethernet net: Add function for parsing the header length out of linear ethernet frames 2014-09-05 17:47:02 -07:00
hsr net/hsr: Remove left-over never-true conditional code. 2014-07-11 15:04:40 -07:00
ieee802154 new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
ipv4 udp: Neaten and reduce size of compute_score functions 2014-12-08 20:28:47 -05:00
ipv6 ipv6: remove useless spin_lock/spin_unlock 2014-12-09 13:18:09 -05:00
ipx switch ipxrtr_route_packet() from iovec to msghdr 2014-11-24 04:28:49 -05:00
irda new helper: memcpy_to_msg() 2014-11-24 04:28:51 -05:00
iucv new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
key new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
l2tp new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
lapb lapb: move EXPORT_SYMBOL after functions. 2014-10-24 15:51:42 -04:00
llc new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
mac80211 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-11-21 22:28:24 -05:00
mac802154 ieee802154: fix byteorder for short address and panid 2014-11-17 09:49:17 +01:00
mpls net: Remove MPLS GSO feature. 2014-11-05 23:52:33 -08:00
netfilter Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next 2014-12-05 20:56:46 -08:00
netlabel netlabel: kernel-doc warning fix 2014-10-09 01:40:05 -04:00
netlink new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
netrom new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
nfc new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
openvswitch Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-11-21 22:28:24 -05:00
packet Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-11-29 20:47:48 -08:00
phonet new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
rds rds: switch rds_message_copy_from_user() to iov_iter 2014-11-24 05:16:43 -05:00
rfkill net: rfkill: kernel-doc warning fixes 2014-10-09 11:16:15 +02:00
rose new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
rxrpc net: Add and use skb_copy_datagram_msg() helper. 2014-11-05 16:46:40 -05:00
sched net_sched: cls_cgroup: remove unnecessary if 2014-12-08 20:53:41 -05:00
sctp switch sctp_user_addto_chunk() and sctp_datamsg_from_user() to passing iov_iter 2014-11-24 05:16:40 -05:00
sunrpc SUNRPC: Fix locking around callback channel reply receive 2014-11-19 12:03:20 -05:00
switchdev bridge: call netdev_sw_port_stp_update when bridge port STP status changes 2014-12-02 20:01:22 -08:00
tipc tipc: drop tx side permission checks 2014-12-09 13:30:13 -05:00
unix switch AF_PACKET and AF_UNIX to skb_copy_datagram_from_iter() 2014-11-24 05:16:39 -05:00
vmw_vsock vmci_transport: switch ->enqeue_dgram, ->enqueue_stream and ->dequeue_stream to msghdr 2014-11-24 05:16:42 -05:00
wimax wimax: convert printk to pr_foo() 2014-10-07 20:28:44 -04:00
wireless nl80211: Broadcast CMD_NEW_INTERFACE and CMD_DEL_INTERFACE 2014-11-19 19:02:42 +01:00
x25 new helper: memcpy_from_msg() 2014-11-24 04:28:48 -05:00
xfrm Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next 2014-12-08 21:30:21 -05:00
Kconfig net: introduce generic switch devices support 2014-12-02 20:01:20 -08:00
Makefile net: introduce generic switch devices support 2014-12-02 20:01:20 -08:00
compat.c fold verify_iovec() into copy_msghdr_from_user() 2014-11-19 16:23:49 -05:00
nonet.c
socket.c fold verify_iovec() into copy_msghdr_from_user() 2014-11-19 16:23:49 -05:00
sysctl_net.c net: Update the sysctl permissions handler to test effective uid/gid 2013-10-07 15:57:56 -04:00