net: fix bogus cast in skb_pagelen() and use unsigned variables
authorAlexey Dobriyan <adobriyan@gmail.com>
Sat, 19 Nov 2016 01:08:08 +0000 (04:08 +0300)
committerDavid S. Miller <davem@davemloft.net>
Sun, 20 Nov 2016 03:11:25 +0000 (22:11 -0500)
commitc72d8cdaa5dbd3baf918046ee5149ab69330923e
treebb708dd87b0244c6aaab7ab2a6499c1ad9706d90
parent32d84cdcfde00f28f6133f0e2b015c86f2466fb1
net: fix bogus cast in skb_pagelen() and use unsigned variables

1) cast to "int" is unnecessary:
   u8 will be promoted to int before decrementing,
   small positive numbers fit into "int", so their values won't be changed
   during promotion.

   Once everything is int including loop counters, signedness doesn't
   matter: 32-bit operations will stay 32-bit operations.

   But! Someone tried to make this loop smart by making everything of
   the same type apparently in an attempt to optimise it.
   Do the optimization, just differently.
   Do the cast where it matters. :^)

2) frag size is unsigned entity and sum of fragments sizes is also
   unsigned.

Make everything unsigned, leave no MOVSX instruction behind.

add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-4 (-4)
function                                     old     new   delta
skb_cow_data                                 835     834      -1
ip_do_fragment                              2549    2548      -1
ip6_fragment                                3130    3128      -2
Total: Before=154865032, After=154865028, chg -0.00%

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h
net/ipv4/ip_output.c
net/ipv6/ip6_output.c