1. 24 4月, 2010 5 次提交
  2. 23 4月, 2010 7 次提交
  3. 22 4月, 2010 6 次提交
  4. 21 4月, 2010 7 次提交
    • D
      tcp: Fix ipv6 checksumming on response packets for real. · f71b70e1
      David S. Miller 提交于
      Commit 6651ffc8
      ("ipv6: Fix tcp_v6_send_response transport header setting.")
      fixed one half of why ipv6 tcp response checksums were
      invalid, but it's not the whole story.
      
      If we're going to use CHECKSUM_PARTIAL for these things (which we are
      since commit 2e8e18ef "tcp: Set
      CHECKSUM_UNNECESSARY in tcp_init_nondata_skb"), we can't be setting
      buff->csum as we always have been here in tcp_v6_send_response.  We
      need to leave it at zero.
      
      Kill that line and checksums are good again.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f71b70e1
    • D
      net: Fix an RCU warning in dev_pick_tx() · 05d17608
      David Howells 提交于
      Fix the following RCU warning in dev_pick_tx():
      
      ===================================================
      [ INFO: suspicious rcu_dereference_check() usage. ]
      ---------------------------------------------------
      net/core/dev.c:1993 invoked rcu_dereference_check() without protection!
      
      other info that might help us debug this:
      
      rcu_scheduler_active = 1, debug_locks = 0
      2 locks held by swapper/0:
       #0:  (&idev->mc_ifc_timer){+.-...}, at: [<ffffffff81039e65>] run_timer_softirq+0x17b/0x278
       #1:  (rcu_read_lock_bh){.+....}, at: [<ffffffff812ea3eb>] dev_queue_xmit+0x14e/0x4dc
      
      stack backtrace:
      Pid: 0, comm: swapper Not tainted 2.6.34-rc5-cachefs #4
      Call Trace:
       <IRQ>  [<ffffffff810516c4>] lockdep_rcu_dereference+0xaa/0xb2
       [<ffffffff812ea4f6>] dev_queue_xmit+0x259/0x4dc
       [<ffffffff812ea3eb>] ? dev_queue_xmit+0x14e/0x4dc
       [<ffffffff81052324>] ? trace_hardirqs_on+0xd/0xf
       [<ffffffff81035362>] ? local_bh_enable_ip+0xbc/0xc1
       [<ffffffff812f0954>] neigh_resolve_output+0x24b/0x27c
       [<ffffffff8134f673>] ip6_output_finish+0x7c/0xb4
       [<ffffffff81350c34>] ip6_output2+0x256/0x261
       [<ffffffff81052324>] ? trace_hardirqs_on+0xd/0xf
       [<ffffffff813517fb>] ip6_output+0xbbc/0xbcb
       [<ffffffff8135bc5d>] ? fib6_force_start_gc+0x2b/0x2d
       [<ffffffff81368acb>] mld_sendpack+0x273/0x39d
       [<ffffffff81368858>] ? mld_sendpack+0x0/0x39d
       [<ffffffff81052099>] ? mark_held_locks+0x52/0x70
       [<ffffffff813692fc>] mld_ifc_timer_expire+0x24f/0x288
       [<ffffffff81039ed6>] run_timer_softirq+0x1ec/0x278
       [<ffffffff81039e65>] ? run_timer_softirq+0x17b/0x278
       [<ffffffff813690ad>] ? mld_ifc_timer_expire+0x0/0x288
       [<ffffffff81035531>] ? __do_softirq+0x69/0x140
       [<ffffffff8103556a>] __do_softirq+0xa2/0x140
       [<ffffffff81002e0c>] call_softirq+0x1c/0x28
       [<ffffffff81004b54>] do_softirq+0x38/0x80
       [<ffffffff81034f06>] irq_exit+0x45/0x47
       [<ffffffff810177c3>] smp_apic_timer_interrupt+0x88/0x96
       [<ffffffff810028d3>] apic_timer_interrupt+0x13/0x20
       <EOI>  [<ffffffff810488dd>] ? __atomic_notifier_call_chain+0x0/0x86
       [<ffffffff810096bf>] ? mwait_idle+0x6e/0x78
       [<ffffffff810096b6>] ? mwait_idle+0x65/0x78
       [<ffffffff810011cb>] cpu_idle+0x4d/0x83
       [<ffffffff81380b05>] rest_init+0xb9/0xc0
       [<ffffffff81380a4c>] ? rest_init+0x0/0xc0
       [<ffffffff8168dcf0>] start_kernel+0x392/0x39d
       [<ffffffff8168d2a3>] x86_64_start_reservations+0xb3/0xb7
       [<ffffffff8168d38b>] x86_64_start_kernel+0xe4/0xeb
      
      An rcu_dereference() should be an rcu_dereference_bh().
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Acked-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      05d17608
    • H
      ipv6: Fix tcp_v6_send_response transport header setting. · 6651ffc8
      Herbert Xu 提交于
      My recent patch to remove the open-coded checksum sequence in
      tcp_v6_send_response broke it as we did not set the transport
      header pointer on the new packet.
      
      Actually, there is code there trying to set the transport
      header properly, but it sets it for the wrong skb ('skb'
      instead of 'buff').
      
      This bug was introduced by commit
      a8fdf2b3 ("ipv6: Fix
      tcp_v6_send_response(): it didn't set skb transport header")
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6651ffc8
    • R
      net: Remove two unnecessary exports (skbuff). · ccb7c773
      Rami Rosen 提交于
      There is no need to export skb_under_panic() and skb_over_panic() in
      skbuff.c, since these methods are used only in skbuff.c ; this patch
      removes these two exports. It also marks these functions as 'static'
      and removeS the extern declarations of them from
      include/linux/skbuff.h
      Signed-off-by: NRami Rosen <ramirose@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ccb7c773
    • E
      net: Fix various endianness glitches · 0eae88f3
      Eric Dumazet 提交于
      Sparse can help us find endianness bugs, but we need to make some
      cleanups to be able to more easily spot real bugs.
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0eae88f3
    • E
      bridge: add a missing ntohs() · 8eabf95c
      Eric Dumazet 提交于
      grec_nsrcs is in network order, we should convert to host horder in
      br_multicast_igmp3_report()
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Acked-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8eabf95c
    • E
      net: sk_sleep() helper · aa395145
      Eric Dumazet 提交于
      Define a new function to return the waitqueue of a "struct sock".
      
      static inline wait_queue_head_t *sk_sleep(struct sock *sk)
      {
      	return sk->sk_sleep;
      }
      
      Change all read occurrences of sk_sleep by a call to this function.
      
      Needed for a future RCU conversion. sk_sleep wont be a field directly
      available.
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      aa395145
  5. 20 4月, 2010 13 次提交
  6. 18 4月, 2010 2 次提交
    • E
      net: Introduce skb_orphan_try() · fc6055a5
      Eric Dumazet 提交于
      Transmitted skb might be attached to a socket and a destructor, for
      memory accounting purposes.
      
      Traditionally, this destructor is called at tx completion time, when skb
      is freed.
      
      When tx completion is performed by another cpu than the sender, this
      forces some cache lines to change ownership. XPS was an attempt to give
      tx completion to initial cpu.
      
      David idea is to call destructor right before giving skb to device (call
      to ndo_start_xmit()). Because device queues are usually small, orphaning
      skb before tx completion is not a big deal. Some drivers already do
      this, we could do it in upper level.
      
      There is one known exception to this early orphaning, called tx
      timestamping. It needs to keep a reference to socket until device can
      give a hardware or software timestamp.
      
      This patch adds a skb_orphan_try() helper, to centralize all exceptions
      to early orphaning in one spot, and use it in dev_hard_start_xmit().
      
      "tbench 16" results on a Nehalem machine (2 X5570  @ 2.93GHz)
      before: Throughput 4428.9 MB/sec 16 procs
      after: Throughput 4448.14 MB/sec 16 procs
      
      UDP should get even better results, its destructor being more complex,
      since SOCK_USE_WRITE_QUEUE is not set (four atomic ops instead of one)
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fc6055a5
    • E
      net: remove time limit in process_backlog() · 9958da05
      Eric Dumazet 提交于
      - There is no point to enforce a time limit in process_backlog(), since
      other napi instances dont follow same rule. We can exit after only one
      packet processed...
      The normal quota of 64 packets per napi instance should be the norm, and
      net_rx_action() already has its own time limit.
      Note : /proc/net/core/dev_weight can be used to tune this 64 default
      value.
      
      - Use DEFINE_PER_CPU_ALIGNED for softnet_data definition.
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9958da05