mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 14:30:06 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Cross-merge networking fixes after downstream PR. Conflicts: include/net/inet_sock.hf866fbc842("ipv4: fix data-races around inet->inet_id")c274af2242("inet: introduce inet->inet_flags") https://lore.kernel.org/all/679ddff6-db6e-4ff6-b177-574e90d0103d@tessares.net/ Adjacent changes: drivers/net/bonding/bond_alb.ce74216b8de("bonding: fix macvlan over alb bond support")f11e5bd159("bonding: support balance-alb with openvswitch") drivers/net/ethernet/broadcom/bgmac.cd6499f0b7c("net: bgmac: Return PTR_ERR() for fixed_phy_register()")23a14488ea("net: bgmac: Fix return value check for fixed_phy_register()") drivers/net/ethernet/broadcom/genet/bcmmii.c32bbe64a13("net: bcmgenet: Fix return value check for fixed_phy_register()")acf50d1adb("net: bcmgenet: Return PTR_ERR() for fixed_phy_register()") net/sctp/socket.cf866fbc842("ipv4: fix data-races around inet->inet_id")b09bde5c35("inet: move inet->mc_loop to inet->inet_frags") Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -722,23 +722,14 @@ static inline struct slave *bond_slave_has_mac(struct bonding *bond,
|
||||
}
|
||||
|
||||
/* Caller must hold rcu_read_lock() for read */
|
||||
static inline bool bond_slave_has_mac_rx(struct bonding *bond, const u8 *mac)
|
||||
static inline bool bond_slave_has_mac_rcu(struct bonding *bond, const u8 *mac)
|
||||
{
|
||||
struct list_head *iter;
|
||||
struct slave *tmp;
|
||||
struct netdev_hw_addr *ha;
|
||||
|
||||
bond_for_each_slave_rcu(bond, tmp, iter)
|
||||
if (ether_addr_equal_64bits(mac, tmp->dev->dev_addr))
|
||||
return true;
|
||||
|
||||
if (netdev_uc_empty(bond->dev))
|
||||
return false;
|
||||
|
||||
netdev_for_each_uc_addr(ha, bond->dev)
|
||||
if (ether_addr_equal_64bits(mac, ha->addr))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -223,7 +223,7 @@ struct inet_sock {
|
||||
__s16 uc_ttl;
|
||||
__be16 inet_sport;
|
||||
struct ip_options_rcu __rcu *inet_opt;
|
||||
__u16 inet_id;
|
||||
atomic_t inet_id;
|
||||
|
||||
__u8 tos;
|
||||
__u8 min_ttl;
|
||||
|
||||
@@ -538,8 +538,19 @@ static inline void ip_select_ident_segs(struct net *net, struct sk_buff *skb,
|
||||
* generator as much as we can.
|
||||
*/
|
||||
if (sk && inet_sk(sk)->inet_daddr) {
|
||||
iph->id = htons(inet_sk(sk)->inet_id);
|
||||
inet_sk(sk)->inet_id += segs;
|
||||
int val;
|
||||
|
||||
/* avoid atomic operations for TCP,
|
||||
* as we hold socket lock at this point.
|
||||
*/
|
||||
if (sk_is_tcp(sk)) {
|
||||
sock_owned_by_me(sk);
|
||||
val = atomic_read(&inet_sk(sk)->inet_id);
|
||||
atomic_set(&inet_sk(sk)->inet_id, val + segs);
|
||||
} else {
|
||||
val = atomic_add_return(segs, &inet_sk(sk)->inet_id);
|
||||
}
|
||||
iph->id = htons(val);
|
||||
return;
|
||||
}
|
||||
if ((iph->frag_off & htons(IP_DF)) && !skb->ignore_df) {
|
||||
|
||||
@@ -6612,6 +6612,7 @@ void ieee80211_stop_rx_ba_session(struct ieee80211_vif *vif, u16 ba_rx_bitmap,
|
||||
* marks frames marked in the bitmap as having been filtered. Afterwards, it
|
||||
* checks if any frames in the window starting from @ssn can now be released
|
||||
* (in case they were only waiting for frames that were filtered.)
|
||||
* (Only work correctly if @max_rx_aggregation_subframes <= 64 frames)
|
||||
*/
|
||||
void ieee80211_mark_rx_ba_filtered_frames(struct ieee80211_sta *pubsta, u8 tid,
|
||||
u16 ssn, u64 filtered,
|
||||
|
||||
@@ -587,6 +587,11 @@ static inline void *nft_set_priv(const struct nft_set *set)
|
||||
return (void *)set->data;
|
||||
}
|
||||
|
||||
static inline bool nft_set_gc_is_pending(const struct nft_set *s)
|
||||
{
|
||||
return refcount_read(&s->refs) != 1;
|
||||
}
|
||||
|
||||
static inline struct nft_set *nft_set_container_of(const void *priv)
|
||||
{
|
||||
return (void *)priv - offsetof(struct nft_set, data);
|
||||
@@ -1729,6 +1734,7 @@ struct nftables_pernet {
|
||||
u64 table_handle;
|
||||
unsigned int base_seq;
|
||||
unsigned int gc_seq;
|
||||
u8 validate_state;
|
||||
};
|
||||
|
||||
extern unsigned int nf_tables_net_id;
|
||||
|
||||
@@ -190,8 +190,8 @@ int rtnl_delete_link(struct net_device *dev, u32 portid, const struct nlmsghdr *
|
||||
int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm,
|
||||
u32 portid, const struct nlmsghdr *nlh);
|
||||
|
||||
int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len,
|
||||
struct netlink_ext_ack *exterr);
|
||||
int rtnl_nla_parse_ifinfomsg(struct nlattr **tb, const struct nlattr *nla_peer,
|
||||
struct netlink_ext_ack *exterr);
|
||||
struct net *rtnl_get_net_ns_capable(struct sock *sk, int netnsid);
|
||||
|
||||
#define MODULE_ALIAS_RTNL_LINK(kind) MODULE_ALIAS("rtnl-link-" kind)
|
||||
|
||||
@@ -1323,6 +1323,7 @@ struct proto {
|
||||
/*
|
||||
* Pressure flag: try to collapse.
|
||||
* Technical note: it is used by multiple contexts non atomically.
|
||||
* Make sure to use READ_ONCE()/WRITE_ONCE() for all reads/writes.
|
||||
* All the __sk_mem_schedule() is of this nature: accounting
|
||||
* is strict, actions are advisory and have some latency.
|
||||
*/
|
||||
@@ -1424,7 +1425,7 @@ static inline bool sk_has_memory_pressure(const struct sock *sk)
|
||||
static inline bool sk_under_global_memory_pressure(const struct sock *sk)
|
||||
{
|
||||
return sk->sk_prot->memory_pressure &&
|
||||
!!*sk->sk_prot->memory_pressure;
|
||||
!!READ_ONCE(*sk->sk_prot->memory_pressure);
|
||||
}
|
||||
|
||||
static inline bool sk_under_memory_pressure(const struct sock *sk)
|
||||
@@ -1436,7 +1437,7 @@ static inline bool sk_under_memory_pressure(const struct sock *sk)
|
||||
mem_cgroup_under_socket_pressure(sk->sk_memcg))
|
||||
return true;
|
||||
|
||||
return !!*sk->sk_prot->memory_pressure;
|
||||
return !!READ_ONCE(*sk->sk_prot->memory_pressure);
|
||||
}
|
||||
|
||||
static inline long
|
||||
@@ -1513,7 +1514,7 @@ proto_memory_pressure(struct proto *prot)
|
||||
{
|
||||
if (!prot->memory_pressure)
|
||||
return false;
|
||||
return !!*prot->memory_pressure;
|
||||
return !!READ_ONCE(*prot->memory_pressure);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user