13 Jan, 2012

1 commit

  • commit a9b3cd7f32 (rcu: convert uses of rcu_assign_pointer(x, NULL) to
    RCU_INIT_POINTER) did a lot of incorrect changes, since it did a
    complete conversion of rcu_assign_pointer(x, y) to RCU_INIT_POINTER(x,
    y).

    We miss needed barriers, even on x86, when y is not NULL.

    Signed-off-by: Eric Dumazet
    CC: Stephen Hemminger
    CC: Paul E. McKenney
    Signed-off-by: David S. Miller

    Eric Dumazet
     

05 Dec, 2011

1 commit


01 Nov, 2011

1 commit


02 Aug, 2011

1 commit

  • When assigning a NULL value to an RCU protected pointer, no barrier
    is needed. The rcu_assign_pointer, used to handle that but will soon
    change to not handle the special case.

    Convert all rcu_assign_pointer of NULL value.

    //smpl
    @@ expression P; @@

    - rcu_assign_pointer(P, NULL)
    + RCU_INIT_POINTER(P, NULL)

    //

    Signed-off-by: Stephen Hemminger
    Acked-by: Paul E. McKenney
    Signed-off-by: David S. Miller

    Stephen Hemminger
     

19 Jul, 2011

1 commit

  • Compiler is not smart enough to avoid double BSWAP instructions in
    ntohl(inet_make_mask(plen)).

    Lets cache this value in struct leaf_info, (fill a hole on 64bit arches)

    With route cache disabled, this saves ~2% of cpu in udpflood bench on
    x86_64 machine.

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

23 May, 2011

1 commit

  • After discovering that wide use of prefetch on modern CPUs
    could be a net loss instead of a win, net drivers which were
    relying on the implicit inclusion of prefetch.h via the list
    headers showed up in the resulting cleanup fallout. Give
    them an explicit include via the following $0.02 script.

    =========================================
    #!/bin/bash
    MANUAL=""
    for i in `git grep -l 'prefetch(.*)' .` ; do
    grep -q '' $i
    if [ $? = 0 ] ; then
    continue
    fi

    ( echo '?^#include '
    echo .
    echo w
    echo q
    ) | ed -s $i > /dev/null 2>&1
    if [ $? != 0 ]; then
    echo $i needs manual fixup
    MANUAL="$i $MANUAL"
    fi
    done
    echo ------------------- 8\
    [ Fixed up some incorrect #include placements, and added some
    non-network drivers and the fib_trie.c case - Linus ]
    Signed-off-by: Linus Torvalds

    Paul Gortmaker
     

21 May, 2011

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1446 commits)
    macvlan: fix panic if lowerdev in a bond
    tg3: Add braces around 5906 workaround.
    tg3: Fix NETIF_F_LOOPBACK error
    macvlan: remove one synchronize_rcu() call
    networking: NET_CLS_ROUTE4 depends on INET
    irda: Fix error propagation in ircomm_lmp_connect_response()
    irda: Kill set but unused variable 'bytes' in irlan_check_command_param()
    irda: Kill set but unused variable 'clen' in ircomm_connect_indication()
    rxrpc: Fix set but unused variable 'usage' in rxrpc_get_transport()
    be2net: Kill set but unused variable 'req' in lancer_fw_download()
    irda: Kill set but unused vars 'saddr' and 'daddr' in irlan_provider_connect_indication()
    atl1c: atl1c_resume() is only used when CONFIG_PM_SLEEP is defined.
    rxrpc: Fix set but unused variable 'usage' in rxrpc_get_peer().
    rxrpc: Kill set but unused variable 'local' in rxrpc_UDP_error_handler()
    rxrpc: Kill set but unused variable 'sp' in rxrpc_process_connection()
    rxrpc: Kill set but unused variable 'sp' in rxrpc_rotate_tx_window()
    pkt_sched: Kill set but unused variable 'protocol' in tc_classify()
    isdn: capi: Use pr_debug() instead of ifdefs.
    tg3: Update version to 3.119
    tg3: Apply rx_discards fix to 5719/5720
    ...

    Fix up trivial conflicts in arch/x86/Kconfig and net/mac80211/agg-tx.c
    as per Davem.

    Linus Torvalds
     

08 May, 2011

1 commit


06 May, 2011

1 commit


02 May, 2011

1 commit


15 Apr, 2011

1 commit

  • fib_select_default() is a complete NOP, and completely pointless
    to invoke, when we have no more than 1 default route installed.

    And this is far and away the common case.

    So remember how many prefixlen==0 routes we have in the routing
    table, and elide the call when we have no more than one of those.

    This cuts output route creation time by 157 cycles on Niagara2+.

    In order to add the new int to fib_table, we have to correct the type
    of ->tb_data[] to unsigned long, otherwise the private area will be
    unaligned on 64-bit systems.

    Signed-off-by: David S. Miller
    Reviewed-by: Eric Dumazet

    David S. Miller
     

12 Apr, 2011

1 commit


31 Mar, 2011

2 commits


26 Mar, 2011

1 commit


25 Mar, 2011

1 commit


22 Mar, 2011

1 commit

  • fib_table_delete forgets to match the routes by prefsrc.
    Callers can specify known IP in fc_prefsrc and we should remove
    the exact route. This is needed for cases when same local or
    broadcast addresses are used in different subnets and the
    routes differ only in prefsrc. All callers that do not provide
    fc_prefsrc will ignore the route prefsrc as before and will
    delete the first occurence. That is how the ip route del default
    magic works.

    Current callers are:

    - ip_rt_ioctl where rtentry_to_fib_config provides fc_prefsrc only
    when the provided device name matches IP label with colon.

    - inet_rtm_delroute where RTA_PREFSRC is optional too

    - fib_magic which deals with routes when deleting addresses
    and where the fc_prefsrc is always set with the primary IP
    for the concerned IFA.

    Signed-off-by: Julian Anastasov
    Signed-off-by: David S. Miller

    Julian Anastasov
     

13 Mar, 2011

2 commits


08 Mar, 2011

1 commit


18 Feb, 2011

1 commit

  • GCC emits all kinds of crazy zero extensions when we go from signed
    int, to unsigned short, etc. etc.

    This transformation has to be legal because:

    1) In tkey_extract_bits() in mask_pfx(), the values are used to
    perform shifts, on which negative values are undefined by C.

    2) In fib_table_lookup() we perform comparisons with unsigned
    values, constants, and additions. None of which should
    encounter negative values.

    Signed-off-by: David S. Miller

    David S. Miller
     

03 Feb, 2011

1 commit


02 Feb, 2011

1 commit


01 Feb, 2011

2 commits

  • Both fib_trie and fib_hash have a local implementation of
    fib_table_select_default(). This is completely unnecessary
    code duplication.

    Since we now remember the fib_table and the head of the fib
    alias list of the default route, we can implement one single
    generic version of this routine.

    Looking at the fib_hash implementation you may get the impression
    that it's possible for there to be multiple top-level routes in
    the table for the default route. The truth is, it isn't, the
    insert code will only allow one entry to exist in the zero
    prefix hash table, because all keys evaluate to zero and all
    keys in a hash table must be unique.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • This will be used later to implement fib_select_default() in a
    completely generic manner, instead of the current situation where the
    default route is re-looked up in the TRIE/HASH table and then the
    available aliases are analyzed.

    Signed-off-by: David S. Miller

    David S. Miller
     

22 Nov, 2010

1 commit

  • We forgot to use __GFP_HIGHMEM in several __vmalloc() calls.

    In ceph, add the missing flag.

    In fib_trie.c, xfrm_hash.c and request_sock.c, using vzalloc() is
    cleaner and allows using HIGHMEM pages as well.

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

29 Oct, 2010

1 commit

  • When we stop a namespace we flush the table and free one, but the
    added fn_zone-s (and their hashes if grown) are leaked. Need to free.
    Tries releases all its stuff in the flushing code.

    Shame on us - this bug exists since the very first make-fib-per-net
    patches in 2.6.27 :(

    Signed-off-by: Pavel Emelyanov
    Signed-off-by: David S. Miller

    Pavel Emelyanov
     

25 Oct, 2010

1 commit

  • * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (39 commits)
    Update broken web addresses in arch directory.
    Update broken web addresses in the kernel.
    Revert "drivers/usb: Remove unnecessary return's from void functions" for musb gadget
    Revert "Fix typo: configuation => configuration" partially
    ida: document IDA_BITMAP_LONGS calculation
    ext2: fix a typo on comment in ext2/inode.c
    drivers/scsi: Remove unnecessary casts of private_data
    drivers/s390: Remove unnecessary casts of private_data
    net/sunrpc/rpc_pipe.c: Remove unnecessary casts of private_data
    drivers/infiniband: Remove unnecessary casts of private_data
    drivers/gpu/drm: Remove unnecessary casts of private_data
    kernel/pm_qos_params.c: Remove unnecessary casts of private_data
    fs/ecryptfs: Remove unnecessary casts of private_data
    fs/seq_file.c: Remove unnecessary casts of private_data
    arm: uengine.c: remove C99 comments
    arm: scoop.c: remove C99 comments
    Fix typo configue => configure in comments
    Fix typo: configuation => configuration
    Fix typo interrest[ing|ed] => interest[ing|ed]
    Fix various typos of valid in comments
    ...

    Fix up trivial conflicts in:
    drivers/char/ipmi/ipmi_si_intf.c
    drivers/usb/gadget/rndis.c
    net/irda/irnet/irnet_ppp.c

    Linus Torvalds
     

21 Oct, 2010

1 commit


18 Oct, 2010

1 commit

  • The patch below updates broken web addresses in the kernel

    Signed-off-by: Justin P. Mattock
    Cc: Maciej W. Rozycki
    Cc: Geert Uytterhoeven
    Cc: Finn Thain
    Cc: Randy Dunlap
    Cc: Matt Turner
    Cc: Dimitry Torokhov
    Cc: Mike Frysinger
    Acked-by: Ben Pfaff
    Acked-by: Hans J. Koch
    Reviewed-by: Finn Thain
    Signed-off-by: Jiri Kosina

    Justin P. Mattock
     

17 Oct, 2010

1 commit


06 Oct, 2010

1 commit

  • fib_lookup() converted to be called in RCU protected context, no
    reference taken and released on a contended cache line (fib_clntref)

    fib_table_lookup() and fib_semantic_match() get an additional parameter.

    struct fib_info gets an rcu_head field, and is freed after an rcu grace
    period.

    Stress test :
    (Sending 160.000.000 UDP frames on same neighbour,
    IP route cache disabled, dual E5540 @2.53GHz,
    32bit kernel, FIB_HASH) (about same results for FIB_TRIE)

    Before patch :

    real 1m31.199s
    user 0m13.761s
    sys 23m24.780s

    After patch:

    real 1m5.375s
    user 0m14.997s
    sys 15m50.115s

    Before patch Profile :

    13044.00 15.4% __ip_route_output_key vmlinux
    8438.00 10.0% dst_destroy vmlinux
    5983.00 7.1% fib_semantic_match vmlinux
    5410.00 6.4% fib_rules_lookup vmlinux
    4803.00 5.7% neigh_lookup vmlinux
    4420.00 5.2% _raw_spin_lock vmlinux
    3883.00 4.6% rt_set_nexthop vmlinux
    3261.00 3.9% _raw_read_lock vmlinux
    2794.00 3.3% fib_table_lookup vmlinux
    2374.00 2.8% neigh_resolve_output vmlinux
    2153.00 2.5% dst_alloc vmlinux
    1502.00 1.8% _raw_read_lock_bh vmlinux
    1484.00 1.8% kmem_cache_alloc vmlinux
    1407.00 1.7% eth_header vmlinux
    1406.00 1.7% ipv4_dst_destroy vmlinux
    1298.00 1.5% __copy_from_user_ll vmlinux
    1174.00 1.4% dev_queue_xmit vmlinux
    1000.00 1.2% ip_output vmlinux

    After patch Profile :

    13712.00 15.8% dst_destroy vmlinux
    8548.00 9.9% __ip_route_output_key vmlinux
    7017.00 8.1% neigh_lookup vmlinux
    4554.00 5.3% fib_semantic_match vmlinux
    4067.00 4.7% _raw_read_lock vmlinux
    3491.00 4.0% dst_alloc vmlinux
    3186.00 3.7% neigh_resolve_output vmlinux
    3103.00 3.6% fib_table_lookup vmlinux
    2098.00 2.4% _raw_read_lock_bh vmlinux
    2081.00 2.4% kmem_cache_alloc vmlinux
    2013.00 2.3% _raw_spin_lock vmlinux
    1763.00 2.0% __copy_from_user_ll vmlinux
    1763.00 2.0% ip_output vmlinux
    1761.00 2.0% ipv4_dst_destroy vmlinux
    1631.00 1.9% eth_header vmlinux
    1440.00 1.7% _raw_read_unlock_bh vmlinux

    Reference results, if IP route cache is enabled :

    real 0m29.718s
    user 0m10.845s
    sys 7m37.341s

    25213.00 29.5% __ip_route_output_key vmlinux
    9011.00 10.5% dst_release vmlinux
    4817.00 5.6% ip_push_pending_frames vmlinux
    4232.00 5.0% ip_finish_output vmlinux
    3940.00 4.6% udp_sendmsg vmlinux
    3730.00 4.4% __copy_from_user_ll vmlinux
    3716.00 4.4% ip_route_output_flow vmlinux
    2451.00 2.9% __xfrm_lookup vmlinux
    2221.00 2.6% ip_append_data vmlinux
    1718.00 2.0% _raw_spin_lock_bh vmlinux
    1655.00 1.9% __alloc_skb vmlinux
    1572.00 1.8% sock_wfree vmlinux
    1345.00 1.6% kfree vmlinux

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

11 Sep, 2010

1 commit

  • Use rcu_dereference_rtnl() helper

    Change hard coded constants in fib_flag_trans()
    7 -> RTN_UNREACHABLE
    8 -> RTN_PROHIBIT

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

09 Sep, 2010

1 commit

  • Hi,
    Here is one more of these warnings and a patch below:

    Sep 5 23:52:33 del kernel: [46044.244833] ===================================================
    Sep 5 23:52:33 del kernel: [46044.269681] [ INFO: suspicious rcu_dereference_check() usage. ]
    Sep 5 23:52:33 del kernel: [46044.277000] ---------------------------------------------------
    Sep 5 23:52:33 del kernel: [46044.285185] net/ipv4/fib_trie.c:1756 invoked rcu_dereference_check() without protection!
    Sep 5 23:52:33 del kernel: [46044.293627]
    Sep 5 23:52:33 del kernel: [46044.293632] other info that might help us debug this:
    Sep 5 23:52:33 del kernel: [46044.293634]
    Sep 5 23:52:33 del kernel: [46044.325333]
    Sep 5 23:52:33 del kernel: [46044.325335] rcu_scheduler_active = 1, debug_locks = 0
    Sep 5 23:52:33 del kernel: [46044.348013] 1 lock held by pppd/1717:
    Sep 5 23:52:33 del kernel: [46044.357548] #0: (rtnl_mutex){+.+.+.}, at: [] rtnl_lock+0xf/0x20
    Sep 5 23:52:33 del kernel: [46044.367647]
    Sep 5 23:52:33 del kernel: [46044.367652] stack backtrace:
    Sep 5 23:52:33 del kernel: [46044.387429] Pid: 1717, comm: pppd Not tainted 2.6.35.4.4a #3
    Sep 5 23:52:33 del kernel: [46044.398764] Call Trace:
    Sep 5 23:52:33 del kernel: [46044.409596] [] ? printk+0x18/0x1e
    Sep 5 23:52:33 del kernel: [46044.420761] [] lockdep_rcu_dereference+0xa9/0xb0
    Sep 5 23:52:33 del kernel: [46044.432229] [] trie_firstleaf+0x65/0x70
    Sep 5 23:52:33 del kernel: [46044.443941] [] fib_table_flush+0x14/0x170
    Sep 5 23:52:33 del kernel: [46044.455823] [] ? local_bh_enable_ip+0x62/0xd0
    Sep 5 23:52:33 del kernel: [46044.467995] [] ? _raw_spin_unlock_bh+0x2f/0x40
    Sep 5 23:52:33 del kernel: [46044.480404] [] ? fib_sync_down_dev+0x120/0x180
    Sep 5 23:52:33 del kernel: [46044.493025] [] fib_flush+0x2d/0x60
    Sep 5 23:52:33 del kernel: [46044.505796] [] fib_disable_ip+0x25/0x50
    Sep 5 23:52:33 del kernel: [46044.518772] [] fib_netdev_event+0x73/0xd0
    Sep 5 23:52:33 del kernel: [46044.531918] [] notifier_call_chain+0x2d/0x70
    Sep 5 23:52:33 del kernel: [46044.545358] [] raw_notifier_call_chain+0x1a/0x20
    Sep 5 23:52:33 del kernel: [46044.559092] [] call_netdevice_notifiers+0x27/0x60
    Sep 5 23:52:33 del kernel: [46044.573037] [] __dev_notify_flags+0x5c/0x80
    Sep 5 23:52:33 del kernel: [46044.586489] [] dev_change_flags+0x37/0x60
    Sep 5 23:52:33 del kernel: [46044.599394] [] devinet_ioctl+0x54d/0x630
    Sep 5 23:52:33 del kernel: [46044.612277] [] inet_ioctl+0x97/0xc0
    Sep 5 23:52:34 del kernel: [46044.625208] [] sock_ioctl+0x6f/0x270
    Sep 5 23:52:34 del kernel: [46044.638046] [] ? handle_mm_fault+0x420/0x6c0
    Sep 5 23:52:34 del kernel: [46044.650968] [] ? sock_ioctl+0x0/0x270
    Sep 5 23:52:34 del kernel: [46044.663865] [] vfs_ioctl+0x28/0xa0
    Sep 5 23:52:34 del kernel: [46044.676556] [] do_vfs_ioctl+0x6a/0x5c0
    Sep 5 23:52:34 del kernel: [46044.688989] [] ? up_read+0x16/0x30
    Sep 5 23:52:34 del kernel: [46044.701411] [] ? do_page_fault+0x1d6/0x3a0
    Sep 5 23:52:34 del kernel: [46044.714223] [] ? fget_light+0xf8/0x2f0
    Sep 5 23:52:34 del kernel: [46044.726601] [] ? sys_socketcall+0x208/0x2c0
    Sep 5 23:52:34 del kernel: [46044.739140] [] sys_ioctl+0x63/0x70
    Sep 5 23:52:34 del kernel: [46044.751967] [] syscall_call+0x7/0xb
    Sep 5 23:52:34 del kernel: [46044.764734] [] ? cookie_v6_check+0x3d0/0x630

    -------------->

    This patch fixes the warning:
    ===================================================
    [ INFO: suspicious rcu_dereference_check() usage. ]
    ---------------------------------------------------
    net/ipv4/fib_trie.c:1756 invoked rcu_dereference_check() without protection!

    other info that might help us debug this:

    rcu_scheduler_active = 1, debug_locks = 0
    1 lock held by pppd/1717:
    #0: (rtnl_mutex){+.+.+.}, at: [] rtnl_lock+0xf/0x20

    stack backtrace:
    Pid: 1717, comm: pppd Not tainted 2.6.35.4a #3
    Call Trace:
    [] ? printk+0x18/0x1e
    [] lockdep_rcu_dereference+0xa9/0xb0
    [] trie_firstleaf+0x65/0x70
    [] fib_table_flush+0x14/0x170
    ...

    Allow trie_firstleaf() to be called either under rcu_read_lock()
    protection or with RTNL held. The same annotation is added to
    node_parent_rcu() to prevent a similar warning a bit later.

    Followup of commits 634a4b20 and 4eaa0e3c.

    Signed-off-by: Jarek Poplawski
    Signed-off-by: David S. Miller

    Jarek Poplawski
     

18 May, 2010

1 commit

  • This patch removes from net/ (but not any netfilter files)
    all the unnecessary return; statements that precede the
    last closing brace of void functions.

    It does not remove the returns that are immediately
    preceded by a label as gcc doesn't like that.

    Done via:
    $ grep -rP --include=*.[ch] -l "return;\n}" net/ | \
    xargs perl -i -e 'local $/ ; while (<>) { s/\n[ \t\n]+return;\n}/\n}/g; print; }'

    Signed-off-by: Joe Perches
    Signed-off-by: David S. Miller

    Joe Perches
     

15 Apr, 2010

1 commit


30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

22 Mar, 2010

1 commit


05 Oct, 2009

1 commit


29 Aug, 2009

1 commit

  • Here is rework and cleanup of the resize function.

    Some bugs we had. We were using ->parent when we should use
    node_parent(). Also we used ->parent which is not assigned by
    inflate in inflate loop.

    Also a fix to set thresholds to power 2 to fit halve
    and double strategy.

    max_resize is renamed to max_work which better indicates
    it's function.

    Reaching max_work is not an error, so warning is removed.
    max_work only limits amount of work done per resize.
    (limits CPU-usage, outstanding memory etc).

    The clean-up makes it relatively easy to add fixed sized
    root-nodes if we would like to decrease the memory pressure
    on routers with large routing tables and dynamic routing.
    If we'll need that...

    Its been tested with 280k routes.

    Work done together with Robert Olsson.

    Signed-off-by: Jens Låås
    Signed-off-by: Robert Olsson
    Signed-off-by: David S. Miller

    Jens Låås