1. 06 Aug, 2012 17 commits
  2. 31 Jul, 2012 4 commits
    • David S. Miller's avatar
      ipv4: Properly purge netdev references on uncached routes. · caacf05e
      David S. Miller authored
      
      
      When a device is unregistered, we have to purge all of the
      references to it that may exist in the entire system.
      
      If a route is uncached, we currently have no way of accomplishing
      this.
      
      So create a global list that is scanned when a network device goes
      down.  This mirrors the logic in net/core/dst.c's dst_ifdown().
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      caacf05e
    • David S. Miller's avatar
      c5038a83
    • Eric Dumazet's avatar
      ipv4: percpu nh_rth_output cache · d26b3a7c
      Eric Dumazet authored
      
      
      Input path is mostly run under RCU and doesnt touch dst refcnt
      
      But output path on forwarding or UDP workloads hits
      badly dst refcount, and we have lot of false sharing, for example
      in ipv4_mtu() when reading rt->rt_pmtu
      
      Using a percpu cache for nh_rth_output gives a nice performance
      increase at a small cost.
      
      24 udpflood test on my 24 cpu machine (dummy0 output device)
      (each process sends 1.000.000 udp frames, 24 processes are started)
      
      before : 5.24 s
      after : 2.06 s
      For reference, time on linux-3.5 : 6.60 s
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Tested-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d26b3a7c
    • Eric Dumazet's avatar
      ipv4: Restore old dst_free() behavior. · 54764bb6
      Eric Dumazet authored
      commit 404e0a8b
      
       (net: ipv4: fix RCU races on dst refcounts) tried
      to solve a race but added a problem at device/fib dismantle time :
      
      We really want to call dst_free() as soon as possible, even if sockets
      still have dst in their cache.
      dst_release() calls in free_fib_info_rcu() are not welcomed.
      
      Root of the problem was that now we also cache output routes (in
      nh_rth_output), we must use call_rcu() instead of call_rcu_bh() in
      rt_free(), because output route lookups are done in process context.
      
      Based on feedback and initial patch from David Miller (adding another
      call_rcu_bh() call in fib, but it appears it was not the right fix)
      
      I left the inet_sk_rx_dst_set() helper and added __rcu attributes
      to nh_rth_output and nh_rth_input to better document what is going on in
      this code.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      54764bb6
  3. 30 Jul, 2012 18 commits
  4. 28 Jul, 2012 1 commit
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net · f7da9cdf
      Linus Torvalds authored
      Pull networking fixes from David Miller:
       "Several bug fixes, some to new features appearing in this merge
        window, some that have been around for a while.
      
        I have a short list of known problems that need to be sorted out, but
        all of them can be solved easily during the run up to 3.6-final.
      
        I'll be offline until Sunday afternoon, but nothing need hold up
        3.6-rc1 and the close of the merge window, networking wise, at this
        point.
      
        1) Fix interface check in ipv4 TCP early demux, from Eric Dumazet.
      
        2) Fix a long standing bug in TCP DMA to userspace offload that can
           hang applications using MSG_TRUNC, from Jiri Kosina.
      
        3) Don't allow TCP_USER_TIMEOUT to be negative, from Hangbin Liu.
      
        4) Don't use GFP_KERNEL under spinlock in kaweth driver, from Dan
           Carpenter"
      
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net:
        tcp: perform DMA to userspace only if there is a task waiting for it
        Revert "openvswitch: potential NULL deref in sample()"
        ipv4: fix TCP early demux
        net: fix rtnetlink IFF_PROMISC and IFF_ALLMULTI handling
        USB: kaweth.c: use GFP_ATOMIC under spin_lock
        tcp: Add TCP_USER_TIMEOUT negative value check
        bcma: add missing iounmap on error path
        bcma: fix regression in interrupt assignment on mips
        mac80211_hwsim: fix possible race condition in usage of info->control.sta & control.vif
      f7da9cdf