diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-08-15 18:04:25 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-08-15 18:04:25 -0400 |
commit | 9a76aba02a37718242d7cdc294f0a3901928aa57 (patch) | |
tree | 2040d038f85d2120f21af83b0793efd5af1864e3 /net/socket.c | |
parent | 0a957467c5fd46142bc9c52758ffc552d4c5e2f7 (diff) | |
parent | 26a1ccc6c117be8e33e0410fce8c5298b0015b99 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
Pull networking updates from David Miller:
"Highlights:
- Gustavo A. R. Silva keeps working on the implicit switch fallthru
changes.
- Support 802.11ax High-Efficiency wireless in cfg80211 et al, From
Luca Coelho.
- Re-enable ASPM in r8169, from Kai-Heng Feng.
- Add virtual XFRM interfaces, which avoids all of the limitations of
existing IPSEC tunnels. From Steffen Klassert.
- Convert GRO over to use a hash table, so that when we have many
flows active we don't traverse a long list during accumluation.
- Many new self tests for routing, TC, tunnels, etc. Too many
contributors to mention them all, but I'm really happy to keep
seeing this stuff.
- Hardware timestamping support for dpaa_eth/fsl-fman from Yangbo Lu.
- Lots of cleanups and fixes in L2TP code from Guillaume Nault.
- Add IPSEC offload support to netdevsim, from Shannon Nelson.
- Add support for slotting with non-uniform distribution to netem
packet scheduler, from Yousuk Seung.
- Add UDP GSO support to mlx5e, from Boris Pismenny.
- Support offloading of Team LAG in NFP, from John Hurley.
- Allow to configure TX queue selection based upon RX queue, from
Amritha Nambiar.
- Support ethtool ring size configuration in aquantia, from Anton
Mikaev.
- Support DSCP and flowlabel per-transport in SCTP, from Xin Long.
- Support list based batching and stack traversal of SKBs, this is
very exciting work. From Edward Cree.
- Busyloop optimizations in vhost_net, from Toshiaki Makita.
- Introduce the ETF qdisc, which allows time based transmissions. IGB
can offload this in hardware. From Vinicius Costa Gomes.
- Add parameter support to devlink, from Moshe Shemesh.
- Several multiplication and division optimizations for BPF JIT in
nfp driver, from Jiong Wang.
- Lots of prepatory work to make more of the packet scheduler layer
lockless, when possible, from Vlad Buslov.
- Add ACK filter and NAT awareness to sch_cake packet scheduler, from
Toke Høiland-Jørgensen.
- Support regions and region snapshots in devlink, from Alex Vesker.
- Allow to attach XDP programs to both HW and SW at the same time on
a given device, with initial support in nfp. From Jakub Kicinski.
- Add TLS RX offload and support in mlx5, from Ilya Lesokhin.
- Use PHYLIB in r8169 driver, from Heiner Kallweit.
- All sorts of changes to support Spectrum 2 in mlxsw driver, from
Ido Schimmel.
- PTP support in mv88e6xxx DSA driver, from Andrew Lunn.
- Make TCP_USER_TIMEOUT socket option more accurate, from Jon
Maxwell.
- Support for templates in packet scheduler classifier, from Jiri
Pirko.
- IPV6 support in RDS, from Ka-Cheong Poon.
- Native tproxy support in nf_tables, from Máté Eckl.
- Maintain IP fragment queue in an rbtree, but optimize properly for
in-order frags. From Peter Oskolkov.
- Improvde handling of ACKs on hole repairs, from Yuchung Cheng"
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1996 commits)
bpf: test: fix spelling mistake "REUSEEPORT" -> "REUSEPORT"
hv/netvsc: Fix NULL dereference at single queue mode fallback
net: filter: mark expected switch fall-through
xen-netfront: fix warn message as irq device name has '/'
cxgb4: Add new T5 PCI device ids 0x50af and 0x50b0
net: dsa: mv88e6xxx: missing unlock on error path
rds: fix building with IPV6=m
inet/connection_sock: prefer _THIS_IP_ to current_text_addr
net: dsa: mv88e6xxx: bitwise vs logical bug
net: sock_diag: Fix spectre v1 gadget in __sock_diag_cmd()
ieee802154: hwsim: using right kind of iteration
net: hns3: Add vlan filter setting by ethtool command -K
net: hns3: Set tx ring' tc info when netdev is up
net: hns3: Remove tx ring BD len register in hns3_enet
net: hns3: Fix desc num set to default when setting channel
net: hns3: Fix for phy link issue when using marvell phy driver
net: hns3: Fix for information of phydev lost problem when down/up
net: hns3: Fix for command format parsing error in hclge_is_all_function_id_zero
net: hns3: Add support for serdes loopback selftest
bnxt_en: take coredump_record structure off stack
...
Diffstat (limited to 'net/socket.c')
-rw-r--r-- | net/socket.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/net/socket.c b/net/socket.c index 792f0313ea91..e6945e318f02 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -252,7 +252,7 @@ static struct inode *sock_alloc_inode(struct super_block *sb) | |||
252 | init_waitqueue_head(&wq->wait); | 252 | init_waitqueue_head(&wq->wait); |
253 | wq->fasync_list = NULL; | 253 | wq->fasync_list = NULL; |
254 | wq->flags = 0; | 254 | wq->flags = 0; |
255 | RCU_INIT_POINTER(ei->socket.wq, wq); | 255 | ei->socket.wq = wq; |
256 | 256 | ||
257 | ei->socket.state = SS_UNCONNECTED; | 257 | ei->socket.state = SS_UNCONNECTED; |
258 | ei->socket.flags = 0; | 258 | ei->socket.flags = 0; |
@@ -266,11 +266,9 @@ static struct inode *sock_alloc_inode(struct super_block *sb) | |||
266 | static void sock_destroy_inode(struct inode *inode) | 266 | static void sock_destroy_inode(struct inode *inode) |
267 | { | 267 | { |
268 | struct socket_alloc *ei; | 268 | struct socket_alloc *ei; |
269 | struct socket_wq *wq; | ||
270 | 269 | ||
271 | ei = container_of(inode, struct socket_alloc, vfs_inode); | 270 | ei = container_of(inode, struct socket_alloc, vfs_inode); |
272 | wq = rcu_dereference_protected(ei->socket.wq, 1); | 271 | kfree_rcu(ei->socket.wq, rcu); |
273 | kfree_rcu(wq, rcu); | ||
274 | kmem_cache_free(sock_inode_cachep, ei); | 272 | kmem_cache_free(sock_inode_cachep, ei); |
275 | } | 273 | } |
276 | 274 | ||
@@ -585,7 +583,7 @@ static void __sock_release(struct socket *sock, struct inode *inode) | |||
585 | module_put(owner); | 583 | module_put(owner); |
586 | } | 584 | } |
587 | 585 | ||
588 | if (rcu_dereference_protected(sock->wq, 1)->fasync_list) | 586 | if (sock->wq->fasync_list) |
589 | pr_err("%s: fasync list not empty!\n", __func__); | 587 | pr_err("%s: fasync list not empty!\n", __func__); |
590 | 588 | ||
591 | if (!sock->file) { | 589 | if (!sock->file) { |
@@ -1112,12 +1110,21 @@ EXPORT_SYMBOL(sock_create_lite); | |||
1112 | static __poll_t sock_poll(struct file *file, poll_table *wait) | 1110 | static __poll_t sock_poll(struct file *file, poll_table *wait) |
1113 | { | 1111 | { |
1114 | struct socket *sock = file->private_data; | 1112 | struct socket *sock = file->private_data; |
1115 | __poll_t events = poll_requested_events(wait); | 1113 | __poll_t events = poll_requested_events(wait), flag = 0; |
1116 | 1114 | ||
1117 | sock_poll_busy_loop(sock, events); | ||
1118 | if (!sock->ops->poll) | 1115 | if (!sock->ops->poll) |
1119 | return 0; | 1116 | return 0; |
1120 | return sock->ops->poll(file, sock, wait) | sock_poll_busy_flag(sock); | 1117 | |
1118 | if (sk_can_busy_loop(sock->sk)) { | ||
1119 | /* poll once if requested by the syscall */ | ||
1120 | if (events & POLL_BUSY_LOOP) | ||
1121 | sk_busy_loop(sock->sk, 1); | ||
1122 | |||
1123 | /* if this socket can poll_ll, tell the system call */ | ||
1124 | flag = POLL_BUSY_LOOP; | ||
1125 | } | ||
1126 | |||
1127 | return sock->ops->poll(file, sock, wait) | flag; | ||
1121 | } | 1128 | } |
1122 | 1129 | ||
1123 | static int sock_mmap(struct file *file, struct vm_area_struct *vma) | 1130 | static int sock_mmap(struct file *file, struct vm_area_struct *vma) |
@@ -1154,7 +1161,7 @@ static int sock_fasync(int fd, struct file *filp, int on) | |||
1154 | return -EINVAL; | 1161 | return -EINVAL; |
1155 | 1162 | ||
1156 | lock_sock(sk); | 1163 | lock_sock(sk); |
1157 | wq = rcu_dereference_protected(sock->wq, lockdep_sock_is_held(sk)); | 1164 | wq = sock->wq; |
1158 | fasync_helper(fd, filp, on, &wq->fasync_list); | 1165 | fasync_helper(fd, filp, on, &wq->fasync_list); |
1159 | 1166 | ||
1160 | if (!wq->fasync_list) | 1167 | if (!wq->fasync_list) |
@@ -2671,8 +2678,7 @@ EXPORT_SYMBOL(sock_unregister); | |||
2671 | 2678 | ||
2672 | bool sock_is_registered(int family) | 2679 | bool sock_is_registered(int family) |
2673 | { | 2680 | { |
2674 | return family < NPROTO && | 2681 | return family < NPROTO && rcu_access_pointer(net_families[family]); |
2675 | rcu_access_pointer(net_families[array_index_nospec(family, NPROTO)]); | ||
2676 | } | 2682 | } |
2677 | 2683 | ||
2678 | static int __init sock_init(void) | 2684 | static int __init sock_init(void) |