diff options
Diffstat (limited to 'net/tipc/msg.c')
| -rw-r--r-- | net/tipc/msg.c | 27 | 
1 files changed, 11 insertions, 16 deletions
diff --git a/net/tipc/msg.c b/net/tipc/msg.c index ce6ab54822d8..5c9fd4791c4b 100644 --- a/net/tipc/msg.c +++ b/net/tipc/msg.c @@ -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);  | 
