Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from David Miller:
1) Fix several scatter gather list issues in kTLS code, from Jakub
Kicinski.
2) macb driver device remove has to kill the hresp_err_tasklet. From
Chuhong Yuan.
3) Several memory leak and reference count bug fixes in tipc, from Tung
Nguyen.
4) Fix mlx5 build error w/o ipv6, from Yue Haibing.
5) Fix jumbo frame and other regressions in r8169, from Heiner
Kallweit.
6) Undo some BUG_ON()'s and replace them with WARN_ON_ONCE and proper
error propagation/handling. From Paolo Abeni.
* git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (24 commits)
openvswitch: remove another BUG_ON()
openvswitch: drop unneeded BUG_ON() in ovs_flow_cmd_build_info()
net: phy: realtek: fix using paged operations with RTL8105e / RTL8208
r8169: fix resume on cable plug-in
r8169: fix jumbo configuration for RTL8168evl
net: emulex: benet: indent a Kconfig depends continuation line
selftests: forwarding: fix race between packet receive and tc check
net: sched: fix `tc -s class show` no bstats on class with nolock subqueues
net: ethernet: ti: ale: ensure vlan/mdb deleted when no members
net/mlx5e: Fix build error without IPV6
selftests: pmtu: use -oneline for ip route list cache
tipc: fix duplicate SYN messages under link congestion
tipc: fix wrong timeout input for tipc_wait_for_cond()
tipc: fix wrong socket reference counter after tipc_sk_timeout() returns
tipc: fix potential memory leak in __tipc_sendmsg()
net: macb: add missed tasklet_kill
selftests: bpf: correct perror strings
selftests: bpf: test_sockmap: handle file creation failures gracefully
net/tls: use sg_next() to walk sg entries
net/tls: remove the dead inplace_crypto code
...
This commit is contained in:
commit
c3bfc5dd73
24 changed files with 254 additions and 134 deletions
|
|
@ -14,6 +14,7 @@
|
|||
#include <net/strparser.h>
|
||||
|
||||
#define MAX_MSG_FRAGS MAX_SKB_FRAGS
|
||||
#define NR_MSG_FRAG_IDS (MAX_MSG_FRAGS + 1)
|
||||
|
||||
enum __sk_action {
|
||||
__SK_DROP = 0,
|
||||
|
|
@ -29,13 +30,15 @@ struct sk_msg_sg {
|
|||
u32 size;
|
||||
u32 copybreak;
|
||||
unsigned long copy;
|
||||
/* The extra element is used for chaining the front and sections when
|
||||
* the list becomes partitioned (e.g. end < start). The crypto APIs
|
||||
* require the chaining.
|
||||
/* The extra two elements:
|
||||
* 1) used for chaining the front and sections when the list becomes
|
||||
* partitioned (e.g. end < start). The crypto APIs require the
|
||||
* chaining;
|
||||
* 2) to chain tailer SG entries after the message.
|
||||
*/
|
||||
struct scatterlist data[MAX_MSG_FRAGS + 1];
|
||||
struct scatterlist data[MAX_MSG_FRAGS + 2];
|
||||
};
|
||||
static_assert(BITS_PER_LONG >= MAX_MSG_FRAGS);
|
||||
static_assert(BITS_PER_LONG >= NR_MSG_FRAG_IDS);
|
||||
|
||||
/* UAPI in filter.c depends on struct sk_msg_sg being first element. */
|
||||
struct sk_msg {
|
||||
|
|
@ -142,13 +145,13 @@ static inline void sk_msg_apply_bytes(struct sk_psock *psock, u32 bytes)
|
|||
|
||||
static inline u32 sk_msg_iter_dist(u32 start, u32 end)
|
||||
{
|
||||
return end >= start ? end - start : end + (MAX_MSG_FRAGS - start);
|
||||
return end >= start ? end - start : end + (NR_MSG_FRAG_IDS - start);
|
||||
}
|
||||
|
||||
#define sk_msg_iter_var_prev(var) \
|
||||
do { \
|
||||
if (var == 0) \
|
||||
var = MAX_MSG_FRAGS - 1; \
|
||||
var = NR_MSG_FRAG_IDS - 1; \
|
||||
else \
|
||||
var--; \
|
||||
} while (0)
|
||||
|
|
@ -156,7 +159,7 @@ static inline u32 sk_msg_iter_dist(u32 start, u32 end)
|
|||
#define sk_msg_iter_var_next(var) \
|
||||
do { \
|
||||
var++; \
|
||||
if (var == MAX_MSG_FRAGS) \
|
||||
if (var == NR_MSG_FRAG_IDS) \
|
||||
var = 0; \
|
||||
} while (0)
|
||||
|
||||
|
|
@ -173,9 +176,9 @@ static inline void sk_msg_clear_meta(struct sk_msg *msg)
|
|||
|
||||
static inline void sk_msg_init(struct sk_msg *msg)
|
||||
{
|
||||
BUILD_BUG_ON(ARRAY_SIZE(msg->sg.data) - 1 != MAX_MSG_FRAGS);
|
||||
BUILD_BUG_ON(ARRAY_SIZE(msg->sg.data) - 1 != NR_MSG_FRAG_IDS);
|
||||
memset(msg, 0, sizeof(*msg));
|
||||
sg_init_marker(msg->sg.data, MAX_MSG_FRAGS);
|
||||
sg_init_marker(msg->sg.data, NR_MSG_FRAG_IDS);
|
||||
}
|
||||
|
||||
static inline void sk_msg_xfer(struct sk_msg *dst, struct sk_msg *src,
|
||||
|
|
@ -196,14 +199,11 @@ static inline void sk_msg_xfer_full(struct sk_msg *dst, struct sk_msg *src)
|
|||
|
||||
static inline bool sk_msg_full(const struct sk_msg *msg)
|
||||
{
|
||||
return (msg->sg.end == msg->sg.start) && msg->sg.size;
|
||||
return sk_msg_iter_dist(msg->sg.start, msg->sg.end) == MAX_MSG_FRAGS;
|
||||
}
|
||||
|
||||
static inline u32 sk_msg_elem_used(const struct sk_msg *msg)
|
||||
{
|
||||
if (sk_msg_full(msg))
|
||||
return MAX_MSG_FRAGS;
|
||||
|
||||
return sk_msg_iter_dist(msg->sg.start, msg->sg.end);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue