diff options
Diffstat (limited to 'drivers/net/xen-netfront.c')
| -rw-r--r-- | drivers/net/xen-netfront.c | 27 | 
1 files changed, 4 insertions, 23 deletions
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index c26e28b4bd9..7ffa43bd7cf 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -1015,29 +1015,10 @@ err:  		i = xennet_fill_frags(np, skb, &tmpq);  		/* -		 * Truesize approximates the size of true data plus -		 * any supervisor overheads. Adding hypervisor -		 * overheads has been shown to significantly reduce -		 * achievable bandwidth with the default receive -		 * buffer size. It is therefore not wise to account -		 * for it here. -		 * -		 * After alloc_skb(RX_COPY_THRESHOLD), truesize is set -		 * to RX_COPY_THRESHOLD + the supervisor -		 * overheads. Here, we add the size of the data pulled -		 * in xennet_fill_frags(). -		 * -		 * We also adjust for any unused space in the main -		 * data area by subtracting (RX_COPY_THRESHOLD - -		 * len). This is especially important with drivers -		 * which split incoming packets into header and data, -		 * using only 66 bytes of the main data area (see the -		 * e1000 driver for example.)  On such systems, -		 * without this last adjustement, our achievable -		 * receive throughout using the standard receive -		 * buffer size was cut by 25%(!!!). -		 */ -		skb->truesize += skb->data_len - RX_COPY_THRESHOLD; +                 * Truesize is the actual allocation size, even if the +                 * allocation is only partially used. +                 */ +		skb->truesize += PAGE_SIZE * skb_shinfo(skb)->nr_frags;  		skb->len += skb->data_len;  		if (rx->flags & XEN_NETRXF_csum_blank)  |