[NETFILTER]: Fix div64_64 in ipt_connbytes Signded-off-by: Patrick McHardy --- commit 62084bc1a04e2fbc492566fa30997bd0a7aa2d0a tree 083c8042609e0da81f0be9e15583d5d31b54e685 parent 68e734a5864ba568058c3b8ea63fac3d7d567542 author Patrick McHardy Sat, 13 Aug 2005 03:16:32 +0200 committer Patrick McHardy Sat, 13 Aug 2005 03:16:32 +0200 net/ipv4/netfilter/ipt_connbytes.c | 22 +++++++++------------- 1 files changed, 9 insertions(+), 13 deletions(-) diff --git a/net/ipv4/netfilter/ipt_connbytes.c b/net/ipv4/netfilter/ipt_connbytes.c --- a/net/ipv4/netfilter/ipt_connbytes.c +++ b/net/ipv4/netfilter/ipt_connbytes.c @@ -22,23 +22,19 @@ MODULE_AUTHOR("Harald Welte 0xffffffff) { - int first_bit = find_first_bit((unsigned long *) ÷nd, sizeof(dividend)); - /* calculate number of bits to shift. shift exactly enough - * bits to make dividend fit in 32bits. */ - int num_shift = (64 - 32 - first_bit); - /* first bit has to be < 32, since dividend was > 0xffffffff */ - result = result >> num_shift; - dividend = dividend >> num_shift; - } + if (divisor > 0xffffffffULL) { + unsigned int shift = fls(divisor >> 32); - do_div(divisor, dividend); + d = divisor >> shift; + dividend >>= shift; + } - return divisor; + do_div(dividend, d); + return dividend; } static int