1. 04 12月, 2009 13 次提交
    • M
      tg3: Add some VPD preprocessor constants · 141518c9
      Matt Carlson 提交于
      This patch cleans up the VPD code by creating preprocessor definitions
      and using them in the place of hardcoded constants.
      Signed-off-by: NMatt Carlson <mcarlson@broadcom.com>
      Reviewed-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      141518c9
    • E
      net: Batch inet_twsk_purge · b099ce26
      Eric W. Biederman 提交于
      This function walks the whole hashtable so there is no point in
      passing it a network namespace.  Instead I purge all timewait
      sockets from dead network namespaces that I find.  If the namespace
      is one of the once I am trying to purge I am guaranteed no new timewait
      sockets can be formed so this will get them all.  If the namespace
      is one I am not acting for it might form a few more but I will
      call inet_twsk_purge again and  shortly to get rid of them.  In
      any even if the network namespace is dead timewait sockets are
      useless.
      
      Move the calls of inet_twsk_purge into batch_exit routines so
      that if I am killing a bunch of namespaces at once I will just
      call inet_twsk_purge once and save a lot of redundant unnecessary
      work.
      
      My simple 4k network namespace exit test the cleanup time dropped from
      roughly 8.2s to 1.6s.  While the time spent running inet_twsk_purge fell
      to about 2ms.  1ms for ipv4 and 1ms for ipv6.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b099ce26
    • E
      net: Allow fib_rule_unregister to batch · e9c5158a
      Eric W. Biederman 提交于
      Refactor the code so fib_rules_register always takes a template instead
      of the actual fib_rules_ops structure that will be used.  This is
      required for network namespace support so 2 out of the 3 callers already
      do this, it allows the error handling to be made common, and it allows
      fib_rules_unregister to free the template for hte caller.
      
      Modify fib_rules_unregister to use call_rcu instead of syncrhonize_rcu
      to allw multiple namespaces to be cleaned up in the same rcu grace
      period.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e9c5158a
    • E
      net: Allow xfrm_user_net_exit to batch efficiently. · d79d792e
      Eric W. Biederman 提交于
      xfrm.nlsk is provided by the xfrm_user module and is access via rcu from
      other parts of the xfrm code.  Add xfrm.nlsk_stash a copy of xfrm.nlsk that
      will never be set to NULL.  This allows the synchronize_net and
      netlink_kernel_release to be deferred until a whole batch of xfrm.nlsk sockets
      have been set to NULL.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d79d792e
    • E
      net: Add support for batching network namespace cleanups · 72ad937a
      Eric W. Biederman 提交于
      - Add exit_list to struct net to support building lists of network
        namespaces to cleanup.
      
      - Add exit_batch to pernet_operations to allow running operations only
        once during a network namespace exit.  Instead of once per network
        namespace.
      
      - Factor opt ops_exit_list and ops_exit_free so the logic with cleanup
        up a network namespace does not need to be duplicated.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      72ad937a
    • P
      ipv4 05/05: add sysctl to accept packets with local source addresses · 8153a10c
      Patrick McHardy 提交于
      commit 8ec1e0ebe26087bfc5c0394ada5feb5758014fc8
      Author: Patrick McHardy <kaber@trash.net>
      Date:   Thu Dec 3 12:16:35 2009 +0100
      
          ipv4: add sysctl to accept packets with local source addresses
      
          Change fib_validate_source() to accept packets with a local source address when
          the "accept_local" sysctl is set for the incoming inet device. Combined with the
          previous patches, this allows to communicate between multiple local interfaces
          over the wire.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8153a10c
    • P
      net 03/05: fib_rules: add oif classification · 1b038a5e
      Patrick McHardy 提交于
      commit 68144d350f4f6c348659c825cde6a82b34c27a91
      Author: Patrick McHardy <kaber@trash.net>
      Date:   Thu Dec 3 12:05:25 2009 +0100
      
          net: fib_rules: add oif classification
      
          Support routing table lookup based on the flow's oif. This is useful to
          classify packets originating from sockets bound to interfaces differently.
      
          The route cache already includes the oif and needs no changes.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1b038a5e
    • P
      net 02/05: fib_rules: rename ifindex/ifname/FRA_IFNAME to iifindex/iifname/FRA_IIFNAME · 491deb24
      Patrick McHardy 提交于
      commit 229e77eec406ad68662f18e49fda8b5d366768c5
      Author: Patrick McHardy <kaber@trash.net>
      Date:   Thu Dec 3 12:05:23 2009 +0100
      
          net: fib_rules: rename ifindex/ifname/FRA_IFNAME to iifindex/iifname/FRA_IIFNAME
      
          The next patch will add oif classification, rename interface related members
          and attributes to reflect that they're used for iif classification.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      491deb24
    • P
      net 01/05: fib_rules: rearrange struct fib_rule · d2858340
      Patrick McHardy 提交于
      commit b8952893d5d86f69c4e499d191b98c6658f64b0f
      Author: Patrick McHardy <kaber@trash.net>
      Date:   Thu Dec 3 12:05:22 2009 +0100
      
          net: fib_rules: rearrange struct fib_rule
      
          The ifname member is only used to resolve interface names and is not needed
          during rule lookups. The target and ctarget members however are used during
          rule lookups and are currently located in a second cacheline.
      
          Move ifname further to the end to make sure both target and ctarget are
          located in the same cacheline as other members used during rule lookups.
      
          The layout on 64 bit changes from:
      
          struct fib_rule {
          	...
                  u32                        table;                /*    56     4 */
                  u8                         action;               /*    60     1 */
      
                  /* XXX 3 bytes hole, try to pack */
      
                  /* --- cacheline 1 boundary (64 bytes) --- */
                  u32                        target;               /*    64     4 */
      
                  /* XXX 4 bytes hole, try to pack */
      
                  struct fib_rule *          ctarget;              /*    72     8 */
                  struct rcu_head            rcu;                  /*    80    16 */
                  struct net *               fr_net;               /*    96     8 */
          };
      
          to:
      
          struct fib_rule {
          	...
                  u32                        table;                /*    40     4 */
                  u8                         action;               /*    44     1 */
      
                  /* XXX 3 bytes hole, try to pack */
      
                  u32                        target;               /*    48     4 */
      
                  /* XXX 4 bytes hole, try to pack */
      
                  struct fib_rule *          ctarget;              /*    56     8 */
                  /* --- cacheline 1 boundary (64 bytes) --- */
                  char                       ifname[16];           /*    64    16 */
                  struct rcu_head            rcu;                  /*    80    16 */
                  struct net *               fr_net;               /*    96     8 */
      
          };
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d2858340
    • G
      Bluetooth: Implement RejActioned flag · 4ec10d97
      Gustavo F. Padovan 提交于
      RejActioned is used to prevent retransmission when a entity is on the
      WAIT_F state, i.e., waiting for a frame with F-bit set due local busy
      condition or a expired retransmission timer. (When these two events raise
      they send a frame with the Poll bit set and enters in the WAIT_F state to
      wait for a frame with the Final bit set.)
      The local entity doesn't send I-frames(the data frames) until the receipt
      of a frame with F-bit set. When that happens it also set RejActioned to false.
      RejActioned is a mandatory feature of ERTM spec.
      Signed-off-by: NGustavo F. Padovan <gustavo@las.ic.unicamp.br>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      4ec10d97
    • G
      Bluetooth: Fix sending ReqSeq on I-frames · 9f121a5a
      Gustavo F. Padovan 提交于
      As specified by ERTM spec an ERTM channel can acknowledge received
      I-frames(the data frames) by sending an I-frame with the proper ReqSeq
      value (i.e. ReqSeq is set to BufferSeq).  Until now we aren't setting the
      ReqSeq value on I-frame control bits. That way we can save sending
      S-frames(Supervise frames) only to acknowledge receipt of I-frames. It
      is very helpful to the full-duplex channel.
      ReqSeq is the packet sequence number sent in an acknowledgement frame to
      acknowledge receipt of frames up to (ReqSeq - 1).
      BufferSeq controls the receiver buffer, it is used to delay
      acknowledgement of new frames to not cause buffer overflow. BufferSeq
      value is not increased until frames are pulled by reassembly function.
      Signed-off-by: NGustavo F. Padovan <gustavo@las.ic.unicamp.br>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      9f121a5a
    • M
      Bluetooth: Unobfuscate tasklet_schedule usage · c78ae283
      Marcel Holtmann 提交于
      The tasklet schedule function helpers are just an obfuscation. So remove
      them and call the schedule functions directly.
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      c78ae283
    • M
      Bluetooth: Turn hci_recv_frame into an exported function · 76bca880
      Marcel Holtmann 提交于
      For future simplification it is important that the hci_recv_frame
      function is no longer an inline function. So move it into the module
      itself and export it.
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      76bca880
  2. 03 12月, 2009 7 次提交
    • I
      tcp: clear hints to avoid a stale one (nfs only affected?) · 8818a9d8
      Ilpo Järvinen 提交于
      Eric Dumazet mentioned in a context of another problem:
      
      "Well, it seems NFS reuses its socket, so maybe we miss some
      cleaning as spotted in this old patch"
      
      I've not check under which conditions that actually happens but
      if true, we need to make sure we don't accidently leave stale
      hints behind when the write queue had to be purged (whether reusing
      with NFS can actually happen if purging took place is something I'm
      not sure of).
      
      ...At least it compiles.
      Signed-off-by: NIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8818a9d8
    • W
      TCPCT part 1g: Responder Cookie => Initiator · 4957faad
      William Allen Simpson 提交于
      Parse incoming TCP_COOKIE option(s).
      
      Calculate <SYN,ACK> TCP_COOKIE option.
      
      Send optional <SYN,ACK> data.
      
      This is a significantly revised implementation of an earlier (year-old)
      patch that no longer applies cleanly, with permission of the original
      author (Adam Langley):
      
          http://thread.gmane.org/gmane.linux.network/102586
      
      Requires:
         TCPCT part 1a: add request_values parameter for sending SYNACK
         TCPCT part 1b: generate Responder Cookie secret
         TCPCT part 1c: sysctl_tcp_cookie_size, socket option TCP_COOKIE_TRANSACTIONS
         TCPCT part 1d: define TCP cookie option, extend existing struct's
         TCPCT part 1e: implement socket option TCP_COOKIE_TRANSACTIONS
         TCPCT part 1f: Initiator Cookie => Responder
      
      Signed-off-by: William.Allen.Simpson@gmail.com
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4957faad
    • W
      TCPCT part 1d: define TCP cookie option, extend existing struct's · 435cf559
      William Allen Simpson 提交于
      Data structures are carefully composed to require minimal additions.
      For example, the struct tcp_options_received cookie_plus variable fits
      between existing 16-bit and 8-bit variables, requiring no additional
      space (taking alignment into consideration).  There are no additions to
      tcp_request_sock, and only 1 pointer in tcp_sock.
      
      This is a significantly revised implementation of an earlier (year-old)
      patch that no longer applies cleanly, with permission of the original
      author (Adam Langley):
      
          http://thread.gmane.org/gmane.linux.network/102586
      
      The principle difference is using a TCP option to carry the cookie nonce,
      instead of a user configured offset in the data.  This is more flexible and
      less subject to user configuration error.  Such a cookie option has been
      suggested for many years, and is also useful without SYN data, allowing
      several related concepts to use the same extension option.
      
          "Re: SYN floods (was: does history repeat itself?)", September 9, 1996.
          http://www.merit.net/mail.archives/nanog/1996-09/msg00235.html
      
          "Re: what a new TCP header might look like", May 12, 1998.
          ftp://ftp.isi.edu/end2end/end2end-interest-1998.mail
      
      These functions will also be used in subsequent patches that implement
      additional features.
      
      Requires:
         TCPCT part 1a: add request_values parameter for sending SYNACK
         TCPCT part 1b: generate Responder Cookie secret
         TCPCT part 1c: sysctl_tcp_cookie_size, socket option TCP_COOKIE_TRANSACTIONS
      
      Signed-off-by: William.Allen.Simpson@gmail.com
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      435cf559
    • W
      TCPCT part 1c: sysctl_tcp_cookie_size, socket option TCP_COOKIE_TRANSACTIONS · 519855c5
      William Allen Simpson 提交于
      Define sysctl (tcp_cookie_size) to turn on and off the cookie option
      default globally, instead of a compiled configuration option.
      
      Define per socket option (TCP_COOKIE_TRANSACTIONS) for setting constant
      data values, retrieving variable cookie values, and other facilities.
      
      Move inline tcp_clear_options() unchanged from net/tcp.h to linux/tcp.h,
      near its corresponding struct tcp_options_received (prior to changes).
      
      This is a straightforward re-implementation of an earlier (year-old)
      patch that no longer applies cleanly, with permission of the original
      author (Adam Langley):
      
          http://thread.gmane.org/gmane.linux.network/102586
      
      These functions will also be used in subsequent patches that implement
      additional features.
      
      Requires:
         net: TCP_MSS_DEFAULT, TCP_MSS_DESIRED
      
      Signed-off-by: William.Allen.Simpson@gmail.com
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      519855c5
    • W
      TCPCT part 1b: generate Responder Cookie secret · da5c78c8
      William Allen Simpson 提交于
      Define (missing) hash message size for SHA1.
      
      Define hashing size constants specific to TCP cookies.
      
      Add new function: tcp_cookie_generator().
      
      Maintain global secret values for tcp_cookie_generator().
      
      This is a significantly revised implementation of earlier (15-year-old)
      Photuris [RFC-2522] code for the KA9Q cooperative multitasking platform.
      
      Linux RCU technique appears to be well-suited to this application, though
      neither of the circular queue items are freed.
      
      These functions will also be used in subsequent patches that implement
      additional features.
      
      Signed-off-by: William.Allen.Simpson@gmail.com
      Acked-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      da5c78c8
    • W
      TCPCT part 1a: add request_values parameter for sending SYNACK · e6b4d113
      William Allen Simpson 提交于
      Add optional function parameters associated with sending SYNACK.
      These parameters are not needed after sending SYNACK, and are not
      used for retransmission.  Avoids extending struct tcp_request_sock,
      and avoids allocating kernel memory.
      
      Also affects DCCP as it uses common struct request_sock_ops,
      but this parameter is currently reserved for future use.
      
      Signed-off-by: William.Allen.Simpson@gmail.com
      Acked-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e6b4d113
    • A
      skbuff: remove skb_dma_map/unmap · c81c2d95
      Alexander Duyck 提交于
      The two functions skb_dma_map/unmap are unsafe to use as they cause
      problems when packets are cloned and sent to multiple devices while a HW
      IOMMU is enabled.  Due to this it is best to remove the code so it is not
      used by any other network driver maintainters.
      Signed-off-by: NAlexander Duyck <alexander.h.duyck@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c81c2d95
  3. 02 12月, 2009 6 次提交
    • E
      net: remove [un]register_pernet_gen_... and update the docs. · 65c0cfaf
      Eric W. Biederman 提交于
      No that all of the callers have been updated to set fields in
      struct pernet_operations, and simplified to let the network
      namespace core handle the allocation and freeing of the storage
      for them, remove the surpurpflous methods and update the docs
      to the new style.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      65c0cfaf
    • E
      net: Automatically allocate per namespace data. · f875bae0
      Eric W. Biederman 提交于
      To get the full benefit of batched network namespace cleanup netowrk
      device deletion needs to be performed by the generic code.  When
      using register_pernet_gen_device and freeing the data in exit_net
      it is impossible to delay allocation until after exit_net has called
      as the device uninit methods are no longer safe.
      
      To correct this, and to simplify working with per network namespace data
      I have moved allocation and deletion of per network namespace data into
      the network namespace core.  The core now frees the data only after
      all of the network namespace exit routines have run.
      
      Now it is only required to set the new fields .id and .size
      in the pernet_operations structure if you want network namespace
      data to be managed for you automatically.
      
      This makes the current register_pernet_gen_device and
      register_pernet_gen_subsys routines unnecessary.  For the moment
      I have left them as compatibility wrappers in net_namespace.h
      They will be removed once all of the users have been updated.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f875bae0
    • E
      net: Batch network namespace destruction. · 2b035b39
      Eric W. Biederman 提交于
      It is fairly common to kill several network namespaces at once.  Either
      because they are nested one inside the other or because they are cooperating
      in multiple machine networking experiments.  As the network stack control logic
      does not parallelize easily batch up multiple network namespaces existing
      together.
      
      To get the full benefit of batching the virtual network devices to be
      removed must be all removed in one batch.  For that purpose I have added
      a loop after the last network device operations have run that batches
      up all remaining network devices and deletes them.
      
      An extra benefit is that the reorganization slightly shrinks the size
      of the per network namespace data structures replaceing a work_struct
      with a list_head.
      
      In a trivial test with 4K namespaces this change reduced the cost of
      a destroying 4K namespaces from 7+ minutes (at 12% cpu) to 44 seconds
      (at 60% cpu).  The bulk of that 44s was spent in inet_twsk_purge.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2b035b39
    • E
      net: Implement for_each_netdev_reverse. · dcbccbd4
      Eric W. Biederman 提交于
      I will need this shortly to implement network namespace shutdown
      batching.  For sanity sake network devices should be removed in
      the reverse order they were created in.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      dcbccbd4
    • E
      net: NETDEV_UNREGISTER_PERNET -> NETDEV_UNREGISTER_BATCH · a5ee1551
      Eric W. Biederman 提交于
      The motivation for an additional notifier in batched netdevice
      notification (rt_do_flush) only needs to be called once per batch not
      once per namespace.
      
      For further batching improvements I need a guarantee that the
      netdevices are unregistered in order allowing me to unregister an all
      of the network devices in a network namespace at the same time with
      the guarantee that the loopback device is really and truly
      unregistered last.
      
      Additionally it appears that we moved the route cache flush after
      the final synchronize_net, which seems wrong and there was no
      explanation.  So I have restored the original location of the final
      synchronize_net.
      
      Cc: Octavian Purdila <opurdila@ixiacom.com>
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a5ee1551
    • D
      SLOW_WORK: Move slow_work's proc file to debugfs · f13a48bd
      David Howells 提交于
      Move slow_work's debugging proc file to debugfs.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Requested-and-acked-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      f13a48bd
  4. 01 12月, 2009 1 次提交
    • J
      mac80211: fix spurious delBA handling · 827d42c9
      Johannes Berg 提交于
      Lennert Buytenhek noticed that delBA handling in mac80211
      was broken and has remotely triggerable problems, some of
      which are due to some code shuffling I did that ended up
      changing the order in which things were done -- this was
      
        commit d75636ef
        Author: Johannes Berg <johannes@sipsolutions.net>
        Date:   Tue Feb 10 21:25:53 2009 +0100
      
          mac80211: RX aggregation: clean up stop session
      
      and other parts were already present in the original
      
        commit d92684e6
        Author: Ron Rindjunsky <ron.rindjunsky@intel.com>
        Date:   Mon Jan 28 14:07:22 2008 +0200
      
            mac80211: A-MPDU Tx add delBA from recipient support
      
      The first problem is that I moved a BUG_ON before various
      checks -- thereby making it possible to hit. As the comment
      indicates, the BUG_ON can be removed since the ampdu_action
      callback must already exist when the state is != IDLE.
      
      The second problem isn't easily exploitable but there's a
      race condition due to unconditionally setting the state to
      OPERATIONAL when a delBA frame is received, even when no
      aggregation session was ever initiated. All the drivers
      accept stopping the session even then, but that opens a
      race window where crashes could happen before the driver
      accepts it. Right now, a WARN_ON may happen with non-HT
      drivers, while the race opens only for HT drivers.
      
      For this case, there are two things necessary to fix it:
       1) don't process spurious delBA frames, and be more careful
          about the session state; don't drop the lock
      
       2) HT drivers need to be prepared to handle a session stop
          even before the session was really started -- this is
          true for all drivers (that support aggregation) but
          iwlwifi which can be fixed easily. The other HT drivers
          (ath9k and ar9170) are behaving properly already.
      Reported-by: NLennert Buytenhek <buytenh@marvell.com>
      Cc: stable@kernel.org
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      827d42c9
  5. 29 11月, 2009 3 次提交
  6. 27 11月, 2009 3 次提交
  7. 26 11月, 2009 3 次提交
  8. 24 11月, 2009 4 次提交