Linux 5.8.9
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.8.9 kernel.
All users of the 5.8 kernel series must upgrade.
The updated 5.8.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.8.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 drivers/infiniband/core/cma.c | 257 +++++++++++++++++-------------------- drivers/net/usb/dm9601.c | 4 fs/io_uring.c | 47 ++++++ net/core/dev.c | 3 net/core/netpoll.c | 2 net/ipv4/fib_trie.c | 3 net/ipv6/sysctl_net_ipv6.c | 3 net/mptcp/protocol.c | 3 net/netlabel/netlabel_domainhash.c | 59 ++++---- net/sched/sch_taprio.c | 30 +++- net/sctp/socket.c | 16 -- net/tipc/crypto.c | 12 + net/tipc/socket.c | 9 - 14 files changed, 258 insertions(+), 192 deletions(-)
Florian Westphal (1):
mptcp: free acked data before waiting for more memory
Greg Kroah-Hartman (1):
Linux 5.8.9
Ido Schimmel (2):
ipv4: Silence suspicious RCU usage warning
ipv6: Fix sysctl max for fib_multipath_hash_policy
Jakub Kicinski (1):
net: disable netpoll on fresh napis
Jason Gunthorpe (4):
RDMA/cma: Simplify DEVICE_REMOVAL for internal_id
RDMA/cma: Using the standard locking pattern when delivering the removal event RDMA/cma: Remove unneeded locking for req paths
RDMA/cma: Execute rdma_cm destruction from a handler properly
Kamil Lorenc (1):
net: usb: dm9601: Add USB ID of Keenetic Plus DSL
Paul Moore (1):
netlabel: fix problems with mapping removal
Pavel Begunkov (2):
io_uring: fix cancel of deferred reqs with ->files
io_uring: fix linked deferred ->files cancellationTetsuo Handa (1):
tipc: fix shutdown() of connectionless socket
Tuong Lien (1):
tipc: fix using smp_processor_id() in preemptible
Vinicius Costa Gomes (1):
taprio: Fix using wrong queues in gate mask
Xin Long (1):
sctp: not disable bh in the whole sctp_get_port_local()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 8 -SUBLEVEL = 8 +SUBLEVEL = 9 EXTRAVERSION = NAME = Kleptomaniac Octopus
drivers/infiniband/core/cma.c +123 -134
449 lines not on this page · raw message
drivers/net/usb/dm9601.c +4 -0
@@ -625,6 +625,10 @@ static const struct usb_device_id products[] = { USB_DEVICE(0x0a46, 0x1269), /* DM9621A USB to Fast Ethernet Adapter */ .driver_info = (unsigned long)&dm9601_info, }, + { + USB_DEVICE(0x0586, 0x3427), /* ZyXEL Keenetic Plus DSL xDSL modem */ + .driver_info = (unsigned long)&dm9601_info, + }, {}, // END };
fs/io_uring.c +47 -0
65 lines not on this page · raw message
net/core/dev.c +2 -1
@@ -6609,12 +6609,13 @@ void netif_napi_add(struct net_device *dev, struct napi_struct *napi,netdev_err_once (dev,"%s() called with weight %d\n" , __func__, weight); napi->weight = weight; -list_add (&napi->dev_list, &dev->napi_list); napi->dev = dev;#ifdef CONFIG_NETPOLL napi->poll_owner =-1 ;#endif set_bit (NAPI_STATE_SCHED , &napi->state); +set_bit (NAPI_STATE_NPSVC , &napi->state); +list_add_rcu (&napi->dev_list, &dev->napi_list);napi_hash_add (napi); }EXPORT_SYMBOL (netif_napi_add);
net/core/netpoll.c +1 -1
@@ -162,7 +162,7 @@ static void poll_napi(struct net_device *dev)struct napi_struct *napi;int cpu =smp_processor_id (); -list_for_each_entry (napi, &dev->napi_list, dev_list) { +list_for_each_entry_rcu (napi, &dev->napi_list, dev_list) {if (cmpxchg (&napi->poll_owner,-1 , cpu) ==-1 ) {poll_one_napi (napi);smp_store_release (&napi->poll_owner,-1 );
net/ipv4/fib_trie.c +2 -1
@@ -2121,7 +2121,8 @@ void fib_info_notify_update(struct net *net, struct nl_info *info)struct hlist_head *head = &net->ipv4.fib_table_hash[h];struct fib_table *tb; -hlist_for_each_entry_rcu (tb, head, tb_hlist) +hlist_for_each_entry_rcu (tb, head, tb_hlist, +lockdep_rtnl_is_held ())__fib_info_notify_update (net, tb, info); } }
net/ipv6/sysctl_net_ipv6.c +2 -1
@@ -21,6 +21,7 @@#include <net/calipso.h> #endif +static int two =2 ;static int flowlabel_reflect_max =0x7 ;static int auto_flowlabels_min;static int auto_flowlabels_max =IP6_AUTO_FLOW_LABEL_MAX ;
@@ -150,7 +151,7 @@ static struct ctl_table ipv6_table_template[] = { .mode = 0644, .proc_handler = proc_rt6_multipath_hash_policy, .extra1 = SYSCTL_ZERO, - .extra2 = SYSCTL_ONE, + .extra2 = &two, }, { .procname = "seg6_flowlabel",
net/mptcp/protocol.c +1 -2
@@ -772,7 +772,6 @@ static int mptcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) restart:mptcp_clean_una (sk); -wait_for_sndbuf:__mptcp_flush_join_list (msk); ssk =mptcp_subflow_get_send (msk); while (!sk_stream_memory_free(sk) ||
@@ -873,7 +872,7 @@ static int mptcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)*/ mptcp_set_timeout (sk, ssk);release_sock (ssk); - goto wait_for_sndbuf; + goto restart; } } }
net/netlabel/netlabel_domainhash.c +30 -29
94 lines not on this page · raw message
net/sched/sch_taprio.c +24 -6
@@ -1177,9 +1177,27 @@ static void taprio_offload_config_changed(struct taprio_sched *q)spin_unlock (&q->current_entry_lock); } -static void taprio_sched_to_offload (struct taprio_sched *q, +static u32 tc_map_to_queue_mask (struct net_device *dev,u32 tc_mask) +{ +u32 i, queue_mask =0 ; + +for (i =0 ; i < dev->num_tc; i++) { +u32 offset, count; + +if (!(tc_mask &BIT (i))) +continue ; + + offset = dev->tc_to_txq[i].offset; + count = dev->tc_to_txq[i].count; + + queue_mask |=GENMASK (offset + count -1 , offset); + } + +return queue_mask; +} + +static void taprio_sched_to_offload (struct net_device *dev,struct sched_gate_list *sched, -const struct tc_mqprio_qopt *mqprio,struct tc_taprio_qopt_offload *offload) {struct sched_entry *entry;
@@ -1194,7 +1212,8 @@ static void taprio_sched_to_offload(struct taprio_sched *q, e->command = entry->command; e->interval = entry->interval; - e->gate_mask = entry->gate_mask; + e->gate_mask =tc_map_to_queue_mask (dev, entry->gate_mask); + i++; }
@@ -1202,7 +1221,6 @@ static void taprio_sched_to_offload(struct taprio_sched *q, }static int taprio_enable_offload (struct net_device *dev, -struct tc_mqprio_qopt *mqprio,struct taprio_sched *q,struct sched_gate_list *sched,struct netlink_ext_ack *extack)
@@ -1224,7 +1242,7 @@ static int taprio_enable_offload(struct net_device *dev,return -ENOMEM ; } offload->enable =1 ; -taprio_sched_to_offload (q, sched, mqprio, offload); +taprio_sched_to_offload (dev, sched, offload); err = ops->ndo_setup_tc (dev,TC_SETUP_QDISC_TAPRIO , offload);if (err <0 ) {
@@ -1486,7 +1504,7 @@ static int taprio_change(struct Qdisc *sch, struct nlattr *opt, }if (FULL_OFFLOAD_IS_ENABLED (q->flags)) - err =taprio_enable_offload (dev, mqprio, q, new_admin, extack); + err =taprio_enable_offload (dev, q, new_admin, extack);else err =taprio_disable_offload (dev, q, extack);if (err)
net/sctp/socket.c +6 -10
@@ -8297,8 +8297,6 @@ static int sctp_get_port_local(struct sock *sk, union sctp_addr *addr)pr_debug ("%s: begins, snum:%d\n" , __func__, snum); -local_bh_disable (); -if (snum ==0 ) {/* Search for an available port. */ int low, high, remaining, index;
@@ -8316,20 +8314,21 @@ static int sctp_get_port_local(struct sock *sk, union sctp_addr *addr)continue ; index =sctp_phashfn (net, rover); head = &sctp_port_hashtable[index]; -spin_lock (&head->lock); +spin_lock_bh (&head->lock);sctp_for_each_hentry (pp, &head->chain)if ((pp->port == rover) &&net_eq (net, pp->net)) goto next;break ; next: -spin_unlock (&head->lock); +spin_unlock_bh (&head->lock); +cond_resched (); }while (--remaining >0 );/* Exhausted local port range during search? */ ret =1 ;if (remaining <=0 ) - goto fail; +return ret;/* OK, here is the one we will use. HEAD (the port * hash table list entry) is non-NULL and we hold it's
@@ -8344,7 +8343,7 @@ static int sctp_get_port_local(struct sock *sk, union sctp_addr *addr)* port iterator, pp being NULL. */ head = &sctp_port_hashtable[sctp_phashfn (net, snum)]; -spin_lock (&head->lock); +spin_lock_bh (&head->lock);sctp_for_each_hentry (pp, &head->chain) {if ((pp->port == snum) &&net_eq (pp->net, net)) goto pp_found;
@@ -8444,10 +8443,7 @@ static int sctp_get_port_local(struct sock *sk, union sctp_addr *addr) ret =0 ; fail_unlock: -spin_unlock (&head->lock); - -fail: -local_bh_enable (); +spin_unlock_bh (&head->lock);return ret; }
net/tipc/crypto.c +9 -3
@@ -326,7 +326,8 @@ static void tipc_aead_free(struct rcu_head *rp)if (aead->cloned) {tipc_aead_put (aead->cloned); }else { - head = *this_cpu_ptr (aead->tfm_entry); + head = *get_cpu_ptr (aead->tfm_entry); +put_cpu_ptr (aead->tfm_entry);list_for_each_entry_safe (tfm_entry, tmp, &head->list, list) {crypto_free_aead (tfm_entry->tfm);list_del (&tfm_entry->list);
@@ -399,10 +400,15 @@ static void tipc_aead_users_set(struct tipc_aead __rcu *aead, int val)*/ static struct crypto_aead *tipc_aead_tfm_next (struct tipc_aead *aead) { -struct tipc_tfm **tfm_entry =this_cpu_ptr (aead->tfm_entry); +struct tipc_tfm **tfm_entry; +struct crypto_aead *tfm; + tfm_entry =get_cpu_ptr (aead->tfm_entry); *tfm_entry =list_next_entry (*tfm_entry, list); -return (*tfm_entry)->tfm; + tfm = (*tfm_entry)->tfm; +put_cpu_ptr (tfm_entry); + +return tfm; }/**
net/tipc/socket.c +6 -3
@@ -2773,18 +2773,21 @@ static int tipc_shutdown(struct socket *sock, int how)trace_tipc_sk_shutdown (sk,NULL ,TIPC_DUMP_ALL ," " );__tipc_shutdown (sock,TIPC_CONN_SHUTDOWN ); - sk->sk_shutdown =SEND_SHUTDOWN ; +if (tipc_sk_type_connectionless (sk)) + sk->sk_shutdown =SHUTDOWN_MASK ; +else + sk->sk_shutdown =SEND_SHUTDOWN ;if (sk->sk_state ==TIPC_DISCONNECTING ) {/* Discard any unreceived messages */ __skb_queue_purge (&sk->sk_receive_queue); -/* Wake up anyone sleeping in poll */ - sk->sk_state_change (sk); res =0 ; }else { res = -ENOTCONN ; } +/* Wake up anyone sleeping in poll. */ + sk->sk_state_change (sk);release_sock (sk);return res;