aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/appletalk/ddp.c5
-rw-r--r--net/core/datagram.c16
-rw-r--r--net/core/dev.c6
-rw-r--r--net/core/pktgen.c12
-rw-r--r--net/core/skbuff.c72
-rw-r--r--net/core/user_dma.c4
-rw-r--r--net/ipv4/inet_lro.c8
-rw-r--r--net/ipv4/ip_fragment.c4
-rw-r--r--net/ipv4/ip_output.c6
-rw-r--r--net/ipv4/tcp.c9
-rw-r--r--net/ipv4/tcp_output.c8
-rw-r--r--net/ipv6/ip6_output.c5
-rw-r--r--net/ipv6/netfilter/nf_conntrack_reasm.c4
-rw-r--r--net/ipv6/reassembly.c4
-rw-r--r--net/xfrm/xfrm_ipcomp.c2
15 files changed, 85 insertions, 80 deletions
diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
index b1fe7c35e8d..bfa9ab93eda 100644
--- a/net/appletalk/ddp.c
+++ b/net/appletalk/ddp.c
@@ -951,13 +951,12 @@ static unsigned long atalk_sum_skb(const struct sk_buff *skb, int offset,
951 /* checksum stuff in frags */ 951 /* checksum stuff in frags */
952 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 952 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
953 int end; 953 int end;
954 954 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
955 WARN_ON(start > offset + len); 955 WARN_ON(start > offset + len);
956 956
957 end = start + skb_shinfo(skb)->frags[i].size; 957 end = start + skb_frag_size(frag);
958 if ((copy = end - offset) > 0) { 958 if ((copy = end - offset) > 0) {
959 u8 *vaddr; 959 u8 *vaddr;
960 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
961 960
962 if (copy > len) 961 if (copy > len)
963 copy = len; 962 copy = len;
diff --git a/net/core/datagram.c b/net/core/datagram.c
index 6449bed457d..68bbf9f65cb 100644
--- a/net/core/datagram.c
+++ b/net/core/datagram.c
@@ -324,14 +324,14 @@ int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset,
324 /* Copy paged appendix. Hmm... why does this look so complicated? */ 324 /* Copy paged appendix. Hmm... why does this look so complicated? */
325 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 325 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
326 int end; 326 int end;
327 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
327 328
328 WARN_ON(start > offset + len); 329 WARN_ON(start > offset + len);
329 330
330 end = start + skb_shinfo(skb)->frags[i].size; 331 end = start + skb_frag_size(frag);
331 if ((copy = end - offset) > 0) { 332 if ((copy = end - offset) > 0) {
332 int err; 333 int err;
333 u8 *vaddr; 334 u8 *vaddr;
334 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
335 struct page *page = skb_frag_page(frag); 335 struct page *page = skb_frag_page(frag);
336 336
337 if (copy > len) 337 if (copy > len)
@@ -410,14 +410,14 @@ int skb_copy_datagram_const_iovec(const struct sk_buff *skb, int offset,
410 /* Copy paged appendix. Hmm... why does this look so complicated? */ 410 /* Copy paged appendix. Hmm... why does this look so complicated? */
411 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 411 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
412 int end; 412 int end;
413 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
413 414
414 WARN_ON(start > offset + len); 415 WARN_ON(start > offset + len);
415 416
416 end = start + skb_shinfo(skb)->frags[i].size; 417 end = start + skb_frag_size(frag);
417 if ((copy = end - offset) > 0) { 418 if ((copy = end - offset) > 0) {
418 int err; 419 int err;
419 u8 *vaddr; 420 u8 *vaddr;
420 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
421 struct page *page = skb_frag_page(frag); 421 struct page *page = skb_frag_page(frag);
422 422
423 if (copy > len) 423 if (copy > len)
@@ -500,14 +500,14 @@ int skb_copy_datagram_from_iovec(struct sk_buff *skb, int offset,
500 /* Copy paged appendix. Hmm... why does this look so complicated? */ 500 /* Copy paged appendix. Hmm... why does this look so complicated? */
501 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 501 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
502 int end; 502 int end;
503 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
503 504
504 WARN_ON(start > offset + len); 505 WARN_ON(start > offset + len);
505 506
506 end = start + skb_shinfo(skb)->frags[i].size; 507 end = start + skb_frag_size(frag);
507 if ((copy = end - offset) > 0) { 508 if ((copy = end - offset) > 0) {
508 int err; 509 int err;
509 u8 *vaddr; 510 u8 *vaddr;
510 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
511 struct page *page = skb_frag_page(frag); 511 struct page *page = skb_frag_page(frag);
512 512
513 if (copy > len) 513 if (copy > len)
@@ -585,15 +585,15 @@ static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
585 585
586 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 586 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
587 int end; 587 int end;
588 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
588 589
589 WARN_ON(start > offset + len); 590 WARN_ON(start > offset + len);
590 591
591 end = start + skb_shinfo(skb)->frags[i].size; 592 end = start + skb_frag_size(frag);
592 if ((copy = end - offset) > 0) { 593 if ((copy = end - offset) > 0) {
593 __wsum csum2; 594 __wsum csum2;
594 int err = 0; 595 int err = 0;
595 u8 *vaddr; 596 u8 *vaddr;
596 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
597 struct page *page = skb_frag_page(frag); 597 struct page *page = skb_frag_page(frag);
598 598
599 if (copy > len) 599 if (copy > len)
diff --git a/net/core/dev.c b/net/core/dev.c
index 8b6118a16b8..cbb5918e4fc 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3489,9 +3489,9 @@ pull:
3489 skb->data_len -= grow; 3489 skb->data_len -= grow;
3490 3490
3491 skb_shinfo(skb)->frags[0].page_offset += grow; 3491 skb_shinfo(skb)->frags[0].page_offset += grow;
3492 skb_shinfo(skb)->frags[0].size -= grow; 3492 skb_frag_size_sub(&skb_shinfo(skb)->frags[0], grow);
3493 3493
3494 if (unlikely(!skb_shinfo(skb)->frags[0].size)) { 3494 if (unlikely(!skb_frag_size(&skb_shinfo(skb)->frags[0]))) {
3495 skb_frag_unref(skb, 0); 3495 skb_frag_unref(skb, 0);
3496 memmove(skb_shinfo(skb)->frags, 3496 memmove(skb_shinfo(skb)->frags,
3497 skb_shinfo(skb)->frags + 1, 3497 skb_shinfo(skb)->frags + 1,
@@ -3559,7 +3559,7 @@ void skb_gro_reset_offset(struct sk_buff *skb)
3559 !PageHighMem(skb_frag_page(&skb_shinfo(skb)->frags[0]))) { 3559 !PageHighMem(skb_frag_page(&skb_shinfo(skb)->frags[0]))) {
3560 NAPI_GRO_CB(skb)->frag0 = 3560 NAPI_GRO_CB(skb)->frag0 =
3561 skb_frag_address(&skb_shinfo(skb)->frags[0]); 3561 skb_frag_address(&skb_shinfo(skb)->frags[0]);
3562 NAPI_GRO_CB(skb)->frag0_len = skb_shinfo(skb)->frags[0].size; 3562 NAPI_GRO_CB(skb)->frag0_len = skb_frag_size(&skb_shinfo(skb)->frags[0]);
3563 } 3563 }
3564} 3564}
3565EXPORT_SYMBOL(skb_gro_reset_offset); 3565EXPORT_SYMBOL(skb_gro_reset_offset);
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
index 796044ac0bf..38d65773749 100644
--- a/net/core/pktgen.c
+++ b/net/core/pktgen.c
@@ -2606,13 +2606,13 @@ static void pktgen_finalize_skb(struct pktgen_dev *pkt_dev, struct sk_buff *skb,
2606 skb_shinfo(skb)->frags[i].page_offset = 0; 2606 skb_shinfo(skb)->frags[i].page_offset = 0;
2607 /*last fragment, fill rest of data*/ 2607 /*last fragment, fill rest of data*/
2608 if (i == (frags - 1)) 2608 if (i == (frags - 1))
2609 skb_shinfo(skb)->frags[i].size = 2609 skb_frag_size_set(&skb_shinfo(skb)->frags[i],
2610 (datalen < PAGE_SIZE ? datalen : PAGE_SIZE); 2610 (datalen < PAGE_SIZE ? datalen : PAGE_SIZE));
2611 else 2611 else
2612 skb_shinfo(skb)->frags[i].size = frag_len; 2612 skb_frag_size_set(&skb_shinfo(skb)->frags[i], frag_len);
2613 datalen -= skb_shinfo(skb)->frags[i].size; 2613 datalen -= skb_frag_size(&skb_shinfo(skb)->frags[i]);
2614 skb->len += skb_shinfo(skb)->frags[i].size; 2614 skb->len += skb_frag_size(&skb_shinfo(skb)->frags[i]);
2615 skb->data_len += skb_shinfo(skb)->frags[i].size; 2615 skb->data_len += skb_frag_size(&skb_shinfo(skb)->frags[i]);
2616 i++; 2616 i++;
2617 skb_shinfo(skb)->nr_frags = i; 2617 skb_shinfo(skb)->nr_frags = i;
2618 } 2618 }
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index a7f855dca92..ce357d98625 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -659,7 +659,7 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask)
659 } 659 }
660 vaddr = kmap_skb_frag(&skb_shinfo(skb)->frags[i]); 660 vaddr = kmap_skb_frag(&skb_shinfo(skb)->frags[i]);
661 memcpy(page_address(page), 661 memcpy(page_address(page),
662 vaddr + f->page_offset, f->size); 662 vaddr + f->page_offset, skb_frag_size(f));
663 kunmap_skb_frag(vaddr); 663 kunmap_skb_frag(vaddr);
664 page->private = (unsigned long)head; 664 page->private = (unsigned long)head;
665 head = page; 665 head = page;
@@ -1190,14 +1190,14 @@ int ___pskb_trim(struct sk_buff *skb, unsigned int len)
1190 goto drop_pages; 1190 goto drop_pages;
1191 1191
1192 for (; i < nfrags; i++) { 1192 for (; i < nfrags; i++) {
1193 int end = offset + skb_shinfo(skb)->frags[i].size; 1193 int end = offset + skb_frag_size(&skb_shinfo(skb)->frags[i]);
1194 1194
1195 if (end < len) { 1195 if (end < len) {
1196 offset = end; 1196 offset = end;
1197 continue; 1197 continue;
1198 } 1198 }
1199 1199
1200 skb_shinfo(skb)->frags[i++].size = len - offset; 1200 skb_frag_size_set(&skb_shinfo(skb)->frags[i++], len - offset);
1201 1201
1202drop_pages: 1202drop_pages:
1203 skb_shinfo(skb)->nr_frags = i; 1203 skb_shinfo(skb)->nr_frags = i;
@@ -1306,9 +1306,11 @@ unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta)
1306 /* Estimate size of pulled pages. */ 1306 /* Estimate size of pulled pages. */
1307 eat = delta; 1307 eat = delta;
1308 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 1308 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
1309 if (skb_shinfo(skb)->frags[i].size >= eat) 1309 int size = skb_frag_size(&skb_shinfo(skb)->frags[i]);
1310
1311 if (size >= eat)
1310 goto pull_pages; 1312 goto pull_pages;
1311 eat -= skb_shinfo(skb)->frags[i].size; 1313 eat -= size;
1312 } 1314 }
1313 1315
1314 /* If we need update frag list, we are in troubles. 1316 /* If we need update frag list, we are in troubles.
@@ -1371,14 +1373,16 @@ pull_pages:
1371 eat = delta; 1373 eat = delta;
1372 k = 0; 1374 k = 0;
1373 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 1375 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
1374 if (skb_shinfo(skb)->frags[i].size <= eat) { 1376 int size = skb_frag_size(&skb_shinfo(skb)->frags[i]);
1377
1378 if (size <= eat) {
1375 skb_frag_unref(skb, i); 1379 skb_frag_unref(skb, i);
1376 eat -= skb_shinfo(skb)->frags[i].size; 1380 eat -= size;
1377 } else { 1381 } else {
1378 skb_shinfo(skb)->frags[k] = skb_shinfo(skb)->frags[i]; 1382 skb_shinfo(skb)->frags[k] = skb_shinfo(skb)->frags[i];
1379 if (eat) { 1383 if (eat) {
1380 skb_shinfo(skb)->frags[k].page_offset += eat; 1384 skb_shinfo(skb)->frags[k].page_offset += eat;
1381 skb_shinfo(skb)->frags[k].size -= eat; 1385 skb_frag_size_sub(&skb_shinfo(skb)->frags[k], eat);
1382 eat = 0; 1386 eat = 0;
1383 } 1387 }
1384 k++; 1388 k++;
@@ -1433,7 +1437,7 @@ int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len)
1433 1437
1434 WARN_ON(start > offset + len); 1438 WARN_ON(start > offset + len);
1435 1439
1436 end = start + skb_shinfo(skb)->frags[i].size; 1440 end = start + skb_frag_size(&skb_shinfo(skb)->frags[i]);
1437 if ((copy = end - offset) > 0) { 1441 if ((copy = end - offset) > 0) {
1438 u8 *vaddr; 1442 u8 *vaddr;
1439 1443
@@ -1632,7 +1636,7 @@ static int __skb_splice_bits(struct sk_buff *skb, struct pipe_inode_info *pipe,
1632 const skb_frag_t *f = &skb_shinfo(skb)->frags[seg]; 1636 const skb_frag_t *f = &skb_shinfo(skb)->frags[seg];
1633 1637
1634 if (__splice_segment(skb_frag_page(f), 1638 if (__splice_segment(skb_frag_page(f),
1635 f->page_offset, f->size, 1639 f->page_offset, skb_frag_size(f),
1636 offset, len, skb, spd, 0, sk, pipe)) 1640 offset, len, skb, spd, 0, sk, pipe))
1637 return 1; 1641 return 1;
1638 } 1642 }
@@ -1742,7 +1746,7 @@ int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len)
1742 1746
1743 WARN_ON(start > offset + len); 1747 WARN_ON(start > offset + len);
1744 1748
1745 end = start + frag->size; 1749 end = start + skb_frag_size(frag);
1746 if ((copy = end - offset) > 0) { 1750 if ((copy = end - offset) > 0) {
1747 u8 *vaddr; 1751 u8 *vaddr;
1748 1752
@@ -1815,7 +1819,7 @@ __wsum skb_checksum(const struct sk_buff *skb, int offset,
1815 1819
1816 WARN_ON(start > offset + len); 1820 WARN_ON(start > offset + len);
1817 1821
1818 end = start + skb_shinfo(skb)->frags[i].size; 1822 end = start + skb_frag_size(&skb_shinfo(skb)->frags[i]);
1819 if ((copy = end - offset) > 0) { 1823 if ((copy = end - offset) > 0) {
1820 __wsum csum2; 1824 __wsum csum2;
1821 u8 *vaddr; 1825 u8 *vaddr;
@@ -1890,7 +1894,7 @@ __wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset,
1890 1894
1891 WARN_ON(start > offset + len); 1895 WARN_ON(start > offset + len);
1892 1896
1893 end = start + skb_shinfo(skb)->frags[i].size; 1897 end = start + skb_frag_size(&skb_shinfo(skb)->frags[i]);
1894 if ((copy = end - offset) > 0) { 1898 if ((copy = end - offset) > 0) {
1895 __wsum csum2; 1899 __wsum csum2;
1896 u8 *vaddr; 1900 u8 *vaddr;
@@ -2163,7 +2167,7 @@ static inline void skb_split_no_header(struct sk_buff *skb,
2163 skb->data_len = len - pos; 2167 skb->data_len = len - pos;
2164 2168
2165 for (i = 0; i < nfrags; i++) { 2169 for (i = 0; i < nfrags; i++) {
2166 int size = skb_shinfo(skb)->frags[i].size; 2170 int size = skb_frag_size(&skb_shinfo(skb)->frags[i]);
2167 2171
2168 if (pos + size > len) { 2172 if (pos + size > len) {
2169 skb_shinfo(skb1)->frags[k] = skb_shinfo(skb)->frags[i]; 2173 skb_shinfo(skb1)->frags[k] = skb_shinfo(skb)->frags[i];
@@ -2179,8 +2183,8 @@ static inline void skb_split_no_header(struct sk_buff *skb,
2179 */ 2183 */
2180 skb_frag_ref(skb, i); 2184 skb_frag_ref(skb, i);
2181 skb_shinfo(skb1)->frags[0].page_offset += len - pos; 2185 skb_shinfo(skb1)->frags[0].page_offset += len - pos;
2182 skb_shinfo(skb1)->frags[0].size -= len - pos; 2186 skb_frag_size_sub(&skb_shinfo(skb1)->frags[0], len - pos);
2183 skb_shinfo(skb)->frags[i].size = len - pos; 2187 skb_frag_size_set(&skb_shinfo(skb)->frags[i], len - pos);
2184 skb_shinfo(skb)->nr_frags++; 2188 skb_shinfo(skb)->nr_frags++;
2185 } 2189 }
2186 k++; 2190 k++;
@@ -2258,7 +2262,7 @@ int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen)
2258 } else { 2262 } else {
2259 merge = to - 1; 2263 merge = to - 1;
2260 2264
2261 todo -= fragfrom->size; 2265 todo -= skb_frag_size(fragfrom);
2262 if (todo < 0) { 2266 if (todo < 0) {
2263 if (skb_prepare_for_shift(skb) || 2267 if (skb_prepare_for_shift(skb) ||
2264 skb_prepare_for_shift(tgt)) 2268 skb_prepare_for_shift(tgt))
@@ -2268,8 +2272,8 @@ int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen)
2268 fragfrom = &skb_shinfo(skb)->frags[from]; 2272 fragfrom = &skb_shinfo(skb)->frags[from];
2269 fragto = &skb_shinfo(tgt)->frags[merge]; 2273 fragto = &skb_shinfo(tgt)->frags[merge];
2270 2274
2271 fragto->size += shiftlen; 2275 skb_frag_size_add(fragto, shiftlen);
2272 fragfrom->size -= shiftlen; 2276 skb_frag_size_sub(fragfrom, shiftlen);
2273 fragfrom->page_offset += shiftlen; 2277 fragfrom->page_offset += shiftlen;
2274 2278
2275 goto onlymerged; 2279 goto onlymerged;
@@ -2293,9 +2297,9 @@ int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen)
2293 fragfrom = &skb_shinfo(skb)->frags[from]; 2297 fragfrom = &skb_shinfo(skb)->frags[from];
2294 fragto = &skb_shinfo(tgt)->frags[to]; 2298 fragto = &skb_shinfo(tgt)->frags[to];
2295 2299
2296 if (todo >= fragfrom->size) { 2300 if (todo >= skb_frag_size(fragfrom)) {
2297 *fragto = *fragfrom; 2301 *fragto = *fragfrom;
2298 todo -= fragfrom->size; 2302 todo -= skb_frag_size(fragfrom);
2299 from++; 2303 from++;
2300 to++; 2304 to++;
2301 2305
@@ -2303,10 +2307,10 @@ int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen)
2303 __skb_frag_ref(fragfrom); 2307 __skb_frag_ref(fragfrom);
2304 fragto->page = fragfrom->page; 2308 fragto->page = fragfrom->page;
2305 fragto->page_offset = fragfrom->page_offset; 2309 fragto->page_offset = fragfrom->page_offset;
2306 fragto->size = todo; 2310 skb_frag_size_set(fragto, todo);
2307 2311
2308 fragfrom->page_offset += todo; 2312 fragfrom->page_offset += todo;
2309 fragfrom->size -= todo; 2313 skb_frag_size_sub(fragfrom, todo);
2310 todo = 0; 2314 todo = 0;
2311 2315
2312 to++; 2316 to++;
@@ -2321,7 +2325,7 @@ int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen)
2321 fragfrom = &skb_shinfo(skb)->frags[0]; 2325 fragfrom = &skb_shinfo(skb)->frags[0];
2322 fragto = &skb_shinfo(tgt)->frags[merge]; 2326 fragto = &skb_shinfo(tgt)->frags[merge];
2323 2327
2324 fragto->size += fragfrom->size; 2328 skb_frag_size_add(fragto, skb_frag_size(fragfrom));
2325 __skb_frag_unref(fragfrom); 2329 __skb_frag_unref(fragfrom);
2326 } 2330 }
2327 2331
@@ -2419,7 +2423,7 @@ next_skb:
2419 2423
2420 while (st->frag_idx < skb_shinfo(st->cur_skb)->nr_frags) { 2424 while (st->frag_idx < skb_shinfo(st->cur_skb)->nr_frags) {
2421 frag = &skb_shinfo(st->cur_skb)->frags[st->frag_idx]; 2425 frag = &skb_shinfo(st->cur_skb)->frags[st->frag_idx];
2422 block_limit = frag->size + st->stepped_offset; 2426 block_limit = skb_frag_size(frag) + st->stepped_offset;
2423 2427
2424 if (abs_offset < block_limit) { 2428 if (abs_offset < block_limit) {
2425 if (!st->frag_data) 2429 if (!st->frag_data)
@@ -2437,7 +2441,7 @@ next_skb:
2437 } 2441 }
2438 2442
2439 st->frag_idx++; 2443 st->frag_idx++;
2440 st->stepped_offset += frag->size; 2444 st->stepped_offset += skb_frag_size(frag);
2441 } 2445 }
2442 2446
2443 if (st->frag_data) { 2447 if (st->frag_data) {
@@ -2567,13 +2571,13 @@ int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb,
2567 left = PAGE_SIZE - frag->page_offset; 2571 left = PAGE_SIZE - frag->page_offset;
2568 copy = (length > left)? left : length; 2572 copy = (length > left)? left : length;
2569 2573
2570 ret = getfrag(from, skb_frag_address(frag) + frag->size, 2574 ret = getfrag(from, skb_frag_address(frag) + skb_frag_size(frag),
2571 offset, copy, 0, skb); 2575 offset, copy, 0, skb);
2572 if (ret < 0) 2576 if (ret < 0)
2573 return -EFAULT; 2577 return -EFAULT;
2574 2578
2575 /* copy was successful so update the size parameters */ 2579 /* copy was successful so update the size parameters */
2576 frag->size += copy; 2580 skb_frag_size_add(frag, copy);
2577 skb->len += copy; 2581 skb->len += copy;
2578 skb->data_len += copy; 2582 skb->data_len += copy;
2579 offset += copy; 2583 offset += copy;
@@ -2720,11 +2724,11 @@ struct sk_buff *skb_segment(struct sk_buff *skb, u32 features)
2720 while (pos < offset + len && i < nfrags) { 2724 while (pos < offset + len && i < nfrags) {
2721 *frag = skb_shinfo(skb)->frags[i]; 2725 *frag = skb_shinfo(skb)->frags[i];
2722 __skb_frag_ref(frag); 2726 __skb_frag_ref(frag);
2723 size = frag->size; 2727 size = skb_frag_size(frag);
2724 2728
2725 if (pos < offset) { 2729 if (pos < offset) {
2726 frag->page_offset += offset - pos; 2730 frag->page_offset += offset - pos;
2727 frag->size -= offset - pos; 2731 skb_frag_size_sub(frag, offset - pos);
2728 } 2732 }
2729 2733
2730 skb_shinfo(nskb)->nr_frags++; 2734 skb_shinfo(nskb)->nr_frags++;
@@ -2733,7 +2737,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, u32 features)
2733 i++; 2737 i++;
2734 pos += size; 2738 pos += size;
2735 } else { 2739 } else {
2736 frag->size -= pos + size - (offset + len); 2740 skb_frag_size_sub(frag, pos + size - (offset + len));
2737 goto skip_fraglist; 2741 goto skip_fraglist;
2738 } 2742 }
2739 2743
@@ -2813,7 +2817,7 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)
2813 } while (--i); 2817 } while (--i);
2814 2818
2815 frag->page_offset += offset; 2819 frag->page_offset += offset;
2816 frag->size -= offset; 2820 skb_frag_size_sub(frag, offset);
2817 2821
2818 skb->truesize -= skb->data_len; 2822 skb->truesize -= skb->data_len;
2819 skb->len -= skb->data_len; 2823 skb->len -= skb->data_len;
@@ -2865,7 +2869,7 @@ merge:
2865 unsigned int eat = offset - headlen; 2869 unsigned int eat = offset - headlen;
2866 2870
2867 skbinfo->frags[0].page_offset += eat; 2871 skbinfo->frags[0].page_offset += eat;
2868 skbinfo->frags[0].size -= eat; 2872 skb_frag_size_sub(&skbinfo->frags[0], eat);
2869 skb->data_len -= eat; 2873 skb->data_len -= eat;
2870 skb->len -= eat; 2874 skb->len -= eat;
2871 offset = headlen; 2875 offset = headlen;
@@ -2936,7 +2940,7 @@ __skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, int len)
2936 2940
2937 WARN_ON(start > offset + len); 2941 WARN_ON(start > offset + len);
2938 2942
2939 end = start + skb_shinfo(skb)->frags[i].size; 2943 end = start + skb_frag_size(&skb_shinfo(skb)->frags[i]);
2940 if ((copy = end - offset) > 0) { 2944 if ((copy = end - offset) > 0) {
2941 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 2945 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2942 2946
diff --git a/net/core/user_dma.c b/net/core/user_dma.c
index 34e9664cae3..2d7cf3d52b4 100644
--- a/net/core/user_dma.c
+++ b/net/core/user_dma.c
@@ -71,13 +71,13 @@ int dma_skb_copy_datagram_iovec(struct dma_chan *chan,
71 /* Copy paged appendix. Hmm... why does this look so complicated? */ 71 /* Copy paged appendix. Hmm... why does this look so complicated? */
72 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 72 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
73 int end; 73 int end;
74 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
74 75
75 WARN_ON(start > offset + len); 76 WARN_ON(start > offset + len);
76 77
77 end = start + skb_shinfo(skb)->frags[i].size; 78 end = start + skb_frag_size(frag);
78 copy = end - offset; 79 copy = end - offset;
79 if (copy > 0) { 80 if (copy > 0) {
80 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
81 struct page *page = skb_frag_page(frag); 81 struct page *page = skb_frag_page(frag);
82 82
83 if (copy > len) 83 if (copy > len)
diff --git a/net/ipv4/inet_lro.c b/net/ipv4/inet_lro.c
index 8e6be5aad11..cc280a3f4f9 100644
--- a/net/ipv4/inet_lro.c
+++ b/net/ipv4/inet_lro.c
@@ -244,11 +244,11 @@ static void lro_add_frags(struct net_lro_desc *lro_desc,
244 skb->truesize += truesize; 244 skb->truesize += truesize;
245 245
246 skb_frags[0].page_offset += hlen; 246 skb_frags[0].page_offset += hlen;
247 skb_frags[0].size -= hlen; 247 skb_frag_size_sub(&skb_frags[0], hlen);
248 248
249 while (tcp_data_len > 0) { 249 while (tcp_data_len > 0) {
250 *(lro_desc->next_frag) = *skb_frags; 250 *(lro_desc->next_frag) = *skb_frags;
251 tcp_data_len -= skb_frags->size; 251 tcp_data_len -= skb_frag_size(skb_frags);
252 lro_desc->next_frag++; 252 lro_desc->next_frag++;
253 skb_frags++; 253 skb_frags++;
254 skb_shinfo(skb)->nr_frags++; 254 skb_shinfo(skb)->nr_frags++;
@@ -400,14 +400,14 @@ static struct sk_buff *lro_gen_skb(struct net_lro_mgr *lro_mgr,
400 skb_frags = skb_shinfo(skb)->frags; 400 skb_frags = skb_shinfo(skb)->frags;
401 while (data_len > 0) { 401 while (data_len > 0) {
402 *skb_frags = *frags; 402 *skb_frags = *frags;
403 data_len -= frags->size; 403 data_len -= skb_frag_size(frags);
404 skb_frags++; 404 skb_frags++;
405 frags++; 405 frags++;
406 skb_shinfo(skb)->nr_frags++; 406 skb_shinfo(skb)->nr_frags++;
407 } 407 }
408 408
409 skb_shinfo(skb)->frags[0].page_offset += hdr_len; 409 skb_shinfo(skb)->frags[0].page_offset += hdr_len;
410 skb_shinfo(skb)->frags[0].size -= hdr_len; 410 skb_frag_size_sub(&skb_shinfo(skb)->frags[0], hdr_len);
411 411
412 skb->ip_summed = ip_summed; 412 skb->ip_summed = ip_summed;
413 skb->csum = sum; 413 skb->csum = sum;
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
index 763589ad673..fdaabf2f2b6 100644
--- a/net/ipv4/ip_fragment.c
+++ b/net/ipv4/ip_fragment.c
@@ -599,8 +599,8 @@ static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev,
599 head->next = clone; 599 head->next = clone;
600 skb_shinfo(clone)->frag_list = skb_shinfo(head)->frag_list; 600 skb_shinfo(clone)->frag_list = skb_shinfo(head)->frag_list;
601 skb_frag_list_init(head); 601 skb_frag_list_init(head);
602 for (i=0; i<skb_shinfo(head)->nr_frags; i++) 602 for (i = 0; i < skb_shinfo(head)->nr_frags; i++)
603 plen += skb_shinfo(head)->frags[i].size; 603 plen += skb_frag_size(&skb_shinfo(head)->frags[i]);
604 clone->len = clone->data_len = head->data_len - plen; 604 clone->len = clone->data_len = head->data_len - plen;
605 head->data_len -= clone->len; 605 head->data_len -= clone->len;
606 head->len -= clone->len; 606 head->len -= clone->len;
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index ae3bb147aff..e1374ab034b 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -1015,13 +1015,13 @@ alloc_new_skb:
1015 err = -EMSGSIZE; 1015 err = -EMSGSIZE;
1016 goto error; 1016 goto error;
1017 } 1017 }
1018 if (getfrag(from, skb_frag_address(frag)+frag->size, 1018 if (getfrag(from, skb_frag_address(frag)+skb_frag_size(frag),
1019 offset, copy, skb->len, skb) < 0) { 1019 offset, copy, skb->len, skb) < 0) {
1020 err = -EFAULT; 1020 err = -EFAULT;
1021 goto error; 1021 goto error;
1022 } 1022 }
1023 cork->off += copy; 1023 cork->off += copy;
1024 frag->size += copy; 1024 skb_frag_size_add(frag, copy);
1025 skb->len += copy; 1025 skb->len += copy;
1026 skb->data_len += copy; 1026 skb->data_len += copy;
1027 skb->truesize += copy; 1027 skb->truesize += copy;
@@ -1230,7 +1230,7 @@ ssize_t ip_append_page(struct sock *sk, struct flowi4 *fl4, struct page *page,
1230 if (len > size) 1230 if (len > size)
1231 len = size; 1231 len = size;
1232 if (skb_can_coalesce(skb, i, page, offset)) { 1232 if (skb_can_coalesce(skb, i, page, offset)) {
1233 skb_shinfo(skb)->frags[i-1].size += len; 1233 skb_frag_size_add(&skb_shinfo(skb)->frags[i-1], len);
1234 } else if (i < MAX_SKB_FRAGS) { 1234 } else if (i < MAX_SKB_FRAGS) {
1235 get_page(page); 1235 get_page(page);
1236 skb_fill_page_desc(skb, i, page, offset, len); 1236 skb_fill_page_desc(skb, i, page, offset, len);
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 4c0da24fb64..132be081cd0 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -813,7 +813,7 @@ new_segment:
813 goto wait_for_memory; 813 goto wait_for_memory;
814 814
815 if (can_coalesce) { 815 if (can_coalesce) {
816 skb_shinfo(skb)->frags[i - 1].size += copy; 816 skb_frag_size_add(&skb_shinfo(skb)->frags[i - 1], copy);
817 } else { 817 } else {
818 get_page(page); 818 get_page(page);
819 skb_fill_page_desc(skb, i, page, offset, copy); 819 skb_fill_page_desc(skb, i, page, offset, copy);
@@ -1058,8 +1058,7 @@ new_segment:
1058 1058
1059 /* Update the skb. */ 1059 /* Update the skb. */
1060 if (merge) { 1060 if (merge) {
1061 skb_shinfo(skb)->frags[i - 1].size += 1061 skb_frag_size_add(&skb_shinfo(skb)->frags[i - 1], copy);
1062 copy;
1063 } else { 1062 } else {
1064 skb_fill_page_desc(skb, i, page, off, copy); 1063 skb_fill_page_desc(skb, i, page, off, copy);
1065 if (TCP_PAGE(sk)) { 1064 if (TCP_PAGE(sk)) {
@@ -3031,8 +3030,8 @@ int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *hp,
3031 for (i = 0; i < shi->nr_frags; ++i) { 3030 for (i = 0; i < shi->nr_frags; ++i) {
3032 const struct skb_frag_struct *f = &shi->frags[i]; 3031 const struct skb_frag_struct *f = &shi->frags[i];
3033 struct page *page = skb_frag_page(f); 3032 struct page *page = skb_frag_page(f);
3034 sg_set_page(&sg, page, f->size, f->page_offset); 3033 sg_set_page(&sg, page, skb_frag_size(f), f->page_offset);
3035 if (crypto_hash_update(desc, &sg, f->size)) 3034 if (crypto_hash_update(desc, &sg, skb_frag_size(f)))
3036 return 1; 3035 return 1;
3037 } 3036 }
3038 3037
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index dde6b576831..ed96c543f1c 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -1094,14 +1094,16 @@ static void __pskb_trim_head(struct sk_buff *skb, int len)
1094 eat = len; 1094 eat = len;
1095 k = 0; 1095 k = 0;
1096 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 1096 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
1097 if (skb_shinfo(skb)->frags[i].size <= eat) { 1097 int size = skb_frag_size(&skb_shinfo(skb)->frags[i]);
1098
1099 if (size <= eat) {
1098 skb_frag_unref(skb, i); 1100 skb_frag_unref(skb, i);
1099 eat -= skb_shinfo(skb)->frags[i].size; 1101 eat -= size;
1100 } else { 1102 } else {
1101 skb_shinfo(skb)->frags[k] = skb_shinfo(skb)->frags[i]; 1103 skb_shinfo(skb)->frags[k] = skb_shinfo(skb)->frags[i];
1102 if (eat) { 1104 if (eat) {
1103 skb_shinfo(skb)->frags[k].page_offset += eat; 1105 skb_shinfo(skb)->frags[k].page_offset += eat;
1104 skb_shinfo(skb)->frags[k].size -= eat; 1106 skb_frag_size_sub(&skb_shinfo(skb)->frags[k], eat);
1105 eat = 0; 1107 eat = 0;
1106 } 1108 }
1107 k++; 1109 k++;
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 1e20b64e646..1c9bf8b5c30 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1512,13 +1512,14 @@ alloc_new_skb:
1512 err = -EMSGSIZE; 1512 err = -EMSGSIZE;
1513 goto error; 1513 goto error;
1514 } 1514 }
1515 if (getfrag(from, skb_frag_address(frag)+frag->size, 1515 if (getfrag(from,
1516 skb_frag_address(frag) + skb_frag_size(frag),
1516 offset, copy, skb->len, skb) < 0) { 1517 offset, copy, skb->len, skb) < 0) {
1517 err = -EFAULT; 1518 err = -EFAULT;
1518 goto error; 1519 goto error;
1519 } 1520 }
1520 sk->sk_sndmsg_off += copy; 1521 sk->sk_sndmsg_off += copy;
1521 frag->size += copy; 1522 skb_frag_size_add(frag, copy);
1522 skb->len += copy; 1523 skb->len += copy;
1523 skb->data_len += copy; 1524 skb->data_len += copy;
1524 skb->truesize += copy; 1525 skb->truesize += copy;
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c
index 08572726381..e8762c73b17 100644
--- a/net/ipv6/netfilter/nf_conntrack_reasm.c
+++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
@@ -378,8 +378,8 @@ nf_ct_frag6_reasm(struct nf_ct_frag6_queue *fq, struct net_device *dev)
378 head->next = clone; 378 head->next = clone;
379 skb_shinfo(clone)->frag_list = skb_shinfo(head)->frag_list; 379 skb_shinfo(clone)->frag_list = skb_shinfo(head)->frag_list;
380 skb_frag_list_init(head); 380 skb_frag_list_init(head);
381 for (i=0; i<skb_shinfo(head)->nr_frags; i++) 381 for (i = 0; i < skb_shinfo(head)->nr_frags; i++)
382 plen += skb_shinfo(head)->frags[i].size; 382 plen += skb_frag_size(&skb_shinfo(head)->frags[i]);
383 clone->len = clone->data_len = head->data_len - plen; 383 clone->len = clone->data_len = head->data_len - plen;
384 head->data_len -= clone->len; 384 head->data_len -= clone->len;
385 head->len -= clone->len; 385 head->len -= clone->len;
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
index 7b954e2539d..cc22099ac8b 100644
--- a/net/ipv6/reassembly.c
+++ b/net/ipv6/reassembly.c
@@ -464,8 +464,8 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
464 head->next = clone; 464 head->next = clone;
465 skb_shinfo(clone)->frag_list = skb_shinfo(head)->frag_list; 465 skb_shinfo(clone)->frag_list = skb_shinfo(head)->frag_list;
466 skb_frag_list_init(head); 466 skb_frag_list_init(head);
467 for (i=0; i<skb_shinfo(head)->nr_frags; i++) 467 for (i = 0; i < skb_shinfo(head)->nr_frags; i++)
468 plen += skb_shinfo(head)->frags[i].size; 468 plen += skb_frag_size(&skb_shinfo(head)->frags[i]);
469 clone->len = clone->data_len = head->data_len - plen; 469 clone->len = clone->data_len = head->data_len - plen;
470 head->data_len -= clone->len; 470 head->data_len -= clone->len;
471 head->len -= clone->len; 471 head->len -= clone->len;
diff --git a/net/xfrm/xfrm_ipcomp.c b/net/xfrm/xfrm_ipcomp.c
index f781b9ab8a5..e5246fbe36c 100644
--- a/net/xfrm/xfrm_ipcomp.c
+++ b/net/xfrm/xfrm_ipcomp.c
@@ -90,7 +90,7 @@ static int ipcomp_decompress(struct xfrm_state *x, struct sk_buff *skb)
90 len = dlen; 90 len = dlen;
91 91
92 frag->page_offset = 0; 92 frag->page_offset = 0;
93 frag->size = len; 93 skb_frag_size_set(frag, len);
94 memcpy(skb_frag_address(frag), scratch, len); 94 memcpy(skb_frag_address(frag), scratch, len);
95 95
96 skb->truesize += len; 96 skb->truesize += len;