net: Remove all uses of LL_ALLOCATED_SPACE
net: Remove all uses of LL_ALLOCATED_SPACE The macro LL_ALLOCATED_SPACE was ill-conceived. It applies the alignment to the sum of needed_headroom and needed_tailroom. As the amount that is then reserved for head room is needed_headroom with alignment, this means that the tail room left may be too small. This patch replaces all uses of LL_ALLOCATED_SPACE with the macro LL_RESERVED_SPACE and direct reference to needed_tailroom. This also fixes the problem with needed_headroom changing between allocating the skb and reserving the head room. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a7ae199224
commit
ae641949df
@ -209,6 +209,7 @@ static int dgram_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||
unsigned mtu;
|
||||
struct sk_buff *skb;
|
||||
struct dgram_sock *ro = dgram_sk(sk);
|
||||
int hlen, tlen;
|
||||
int err;
|
||||
|
||||
if (msg->msg_flags & MSG_OOB) {
|
||||
@ -229,13 +230,15 @@ static int dgram_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||
mtu = dev->mtu;
|
||||
pr_debug("name = %s, mtu = %u\n", dev->name, mtu);
|
||||
|
||||
skb = sock_alloc_send_skb(sk, LL_ALLOCATED_SPACE(dev) + size,
|
||||
hlen = LL_RESERVED_SPACE(dev);
|
||||
tlen = dev->needed_tailroom;
|
||||
skb = sock_alloc_send_skb(sk, hlen + tlen + size,
|
||||
msg->msg_flags & MSG_DONTWAIT,
|
||||
&err);
|
||||
if (!skb)
|
||||
goto out_dev;
|
||||
|
||||
skb_reserve(skb, LL_RESERVED_SPACE(dev));
|
||||
skb_reserve(skb, hlen);
|
||||
|
||||
skb_reset_network_header(skb);
|
||||
|
||||
|
Reference in New Issue
Block a user