Merge branch 'tipc-next'
Menglong Dong says: ==================== net: tipc: fix FB_MTU eat two pages and do some code cleanup In the first patch, FB_MTU is redefined to make sure data size will not exceed PAGE_SIZE. Besides, I removed the alignment for buf_size in tipc_buf_acquire, because skb_alloc_fclone will do the alignment job. In the second patch, I removed align() in msg.c and replace it with ALIGN(). Changes since V5: - remove blank line after Fixes in commit log in the first patch Changes since V4: - remove ONE_PAGE_SKB_SZ and replace it with one_page_mtu in the first patch. - fix some code style problems for the second patch. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
c948b46a7d
@ -699,7 +699,7 @@ int tipc_bcast_init(struct net *net)
|
||||
spin_lock_init(&tipc_net(net)->bclock);
|
||||
|
||||
if (!tipc_link_bc_create(net, 0, 0, NULL,
|
||||
FB_MTU,
|
||||
one_page_mtu,
|
||||
BCLINK_WIN_DEFAULT,
|
||||
BCLINK_WIN_DEFAULT,
|
||||
0,
|
||||
|
@ -41,19 +41,18 @@
|
||||
#include "name_table.h"
|
||||
#include "crypto.h"
|
||||
|
||||
#define BUF_ALIGN(x) ALIGN(x, 4)
|
||||
#define MAX_FORWARD_SIZE 1024
|
||||
#ifdef CONFIG_TIPC_CRYPTO
|
||||
#define BUF_HEADROOM ALIGN(((LL_MAX_HEADER + 48) + EHDR_MAX_SIZE), 16)
|
||||
#define BUF_TAILROOM (TIPC_AES_GCM_TAG_SIZE)
|
||||
#define BUF_OVERHEAD (BUF_HEADROOM + TIPC_AES_GCM_TAG_SIZE)
|
||||
#else
|
||||
#define BUF_HEADROOM (LL_MAX_HEADER + 48)
|
||||
#define BUF_TAILROOM 16
|
||||
#define BUF_OVERHEAD BUF_HEADROOM
|
||||
#endif
|
||||
|
||||
static unsigned int align(unsigned int i)
|
||||
{
|
||||
return (i + 3) & ~3u;
|
||||
}
|
||||
const int one_page_mtu = PAGE_SIZE - SKB_DATA_ALIGN(BUF_OVERHEAD) -
|
||||
SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
||||
|
||||
/**
|
||||
* tipc_buf_acquire - creates a TIPC message buffer
|
||||
@ -69,13 +68,8 @@ static unsigned int align(unsigned int i)
|
||||
struct sk_buff *tipc_buf_acquire(u32 size, gfp_t gfp)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
#ifdef CONFIG_TIPC_CRYPTO
|
||||
unsigned int buf_size = (BUF_HEADROOM + size + BUF_TAILROOM + 3) & ~3u;
|
||||
#else
|
||||
unsigned int buf_size = (BUF_HEADROOM + size + 3) & ~3u;
|
||||
#endif
|
||||
|
||||
skb = alloc_skb_fclone(buf_size, gfp);
|
||||
skb = alloc_skb_fclone(BUF_OVERHEAD + size, gfp);
|
||||
if (skb) {
|
||||
skb_reserve(skb, BUF_HEADROOM);
|
||||
skb_put(skb, size);
|
||||
@ -395,7 +389,8 @@ int tipc_msg_build(struct tipc_msg *mhdr, struct msghdr *m, int offset,
|
||||
if (unlikely(!skb)) {
|
||||
if (pktmax != MAX_MSG_SIZE)
|
||||
return -ENOMEM;
|
||||
rc = tipc_msg_build(mhdr, m, offset, dsz, FB_MTU, list);
|
||||
rc = tipc_msg_build(mhdr, m, offset, dsz,
|
||||
one_page_mtu, list);
|
||||
if (rc != dsz)
|
||||
return rc;
|
||||
if (tipc_msg_assemble(list))
|
||||
@ -490,7 +485,7 @@ static bool tipc_msg_bundle(struct sk_buff *bskb, struct tipc_msg *msg,
|
||||
|
||||
msz = msg_size(msg);
|
||||
bsz = msg_size(bmsg);
|
||||
offset = align(bsz);
|
||||
offset = BUF_ALIGN(bsz);
|
||||
pad = offset - bsz;
|
||||
|
||||
if (unlikely(skb_tailroom(bskb) < (pad + msz)))
|
||||
@ -547,7 +542,7 @@ bool tipc_msg_try_bundle(struct sk_buff *tskb, struct sk_buff **skb, u32 mss,
|
||||
|
||||
/* Make a new bundle of the two messages if possible */
|
||||
tsz = msg_size(buf_msg(tskb));
|
||||
if (unlikely(mss < align(INT_H_SIZE + tsz) + msg_size(msg)))
|
||||
if (unlikely(mss < BUF_ALIGN(INT_H_SIZE + tsz) + msg_size(msg)))
|
||||
return true;
|
||||
if (unlikely(pskb_expand_head(tskb, INT_H_SIZE, mss - tsz - INT_H_SIZE,
|
||||
GFP_ATOMIC)))
|
||||
@ -606,7 +601,7 @@ bool tipc_msg_extract(struct sk_buff *skb, struct sk_buff **iskb, int *pos)
|
||||
if (unlikely(!tipc_msg_validate(iskb)))
|
||||
goto none;
|
||||
|
||||
*pos += align(imsz);
|
||||
*pos += BUF_ALIGN(imsz);
|
||||
return true;
|
||||
none:
|
||||
kfree_skb(skb);
|
||||
|
@ -99,9 +99,10 @@ struct plist;
|
||||
#define MAX_H_SIZE 60 /* Largest possible TIPC header size */
|
||||
|
||||
#define MAX_MSG_SIZE (MAX_H_SIZE + TIPC_MAX_USER_MSG_SIZE)
|
||||
#define FB_MTU 3744
|
||||
#define TIPC_MEDIA_INFO_OFFSET 5
|
||||
|
||||
extern const int one_page_mtu;
|
||||
|
||||
struct tipc_skb_cb {
|
||||
union {
|
||||
struct {
|
||||
|
Loading…
Reference in New Issue
Block a user