1. 10 5月, 2015 5 次提交
    • D
      Merge branch 'rds' · d3196a24
      David S. Miller 提交于
      Sowmini Varadhan says:
      
      ====================
      net/rds: RDS-TCP robustness fixes
      
      This patch-set contains bug fixes for state-recovery at the RDS
      layer when the underlying transport is TCP and the TCP state at one
      of the endpoints is reset
      
      V2 changes: DaveM comments to reduce memory footprint, follow
                  NFS/RPC model where possible. Added test-case #3
      
      Without the changes in this set, when one of the endpoints is reset,
      the existing code does not correctly clean up RDS socket state for stale
      connections, resulting in some unstable, timing-dependant behavior on
      the wire, including an infinite exchange of 3WHs back-and-forth, and a
      resulting potential to never converge RDS state.
      
      Test cases used to verify the changes in this set are:
      
      1. Start rds client/server applications on two participating nodes,
         node1 and node2. After at least one packet has been sent (to establish
         the TCP connection), restart the rds_tcp module on the client, and
         now resend packets. Tcpdump should show server sending a FIN for the
         "old" client port, and clean connection establishment/exchange for
         the new client port.
      
      2. At the end of step 1, restart rds srever on node2, and start client on
         node1, make sure using tcpdump, 'netstat -an|grep 16385' that
         packets flow correctly.
      
      3. start RDS client/server application on two participating nodes, and
         repeat steps 1 and 2, but this time, simulate node failure by doing
         "ifconfig <intf> down", so no FIN is sent.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d3196a24
    • S
      net/rds: RDS-TCP: only initiate reconnect attempt on outgoing TCP socket. · c82ac7e6
      Sowmini Varadhan 提交于
      When the peer of an RDS-TCP connection restarts, a reconnect
      attempt should only be made from the active side  of the TCP
      connection, i.e. the side that has a transient TCP port
      number. Do not add the passive side of the TCP connection
      to the c_hash_node and thus avoid triggering rds_queue_reconnect()
      for passive rds connections.
      Signed-off-by: NSowmini Varadhan <sowmini.varadhan@oracle.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c82ac7e6
    • S
      net/rds: RDS-TCP: Always create a new rds_sock for an incoming connection. · f711a6ae
      Sowmini Varadhan 提交于
      When running RDS over TCP, the active (client) side connects to the
      listening ("passive") side at the RDS_TCP_PORT.  After the connection
      is established, if the client side reboots (potentially without even
      sending a FIN) the server still has a TCP socket in the esablished
      state.  If the server-side now gets a new SYN comes from the client
      with a different client port, TCP will create a new socket-pair, but
      the RDS layer will incorrectly pull up the old rds_connection (which
      is still associated with the stale t_sock and RDS socket state).
      
      This patch corrects this behavior by having rds_tcp_accept_one()
      always create a new connection for an incoming TCP SYN.
      The rds and tcp state associated with the old socket-pair is cleaned
      up via the rds_tcp_state_change() callback which would typically be
      invoked in most cases when the client-TCP sends a FIN on TCP restart,
      triggering a transition to CLOSE_WAIT state. In the rarer event of client
      death without a FIN, TCP_KEEPALIVE probes on the socket will detect
      the stale socket, and the TCP transition to CLOSE state will trigger
      the RDS state cleanup.
      Signed-off-by: NSowmini Varadhan <sowmini.varadhan@oracle.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f711a6ae
    • M
      ipv6: Fixed source specific default route handling. · e16e888b
      Markus Stenberg 提交于
      If there are only IPv6 source specific default routes present, the
      host gets -ENETUNREACH on e.g. connect() because ip6_dst_lookup_tail
      calls ip6_route_output first, and given source address any, it fails,
      and ip6_route_get_saddr is never called.
      
      The change is to use the ip6_route_get_saddr, even if the initial
      ip6_route_output fails, and then doing ip6_route_output _again_ after
      we have appropriate source address available.
      
      Note that this is '99% fix' to the problem; a correct fix would be to
      do route lookups only within addrconf.c when picking a source address,
      and never call ip6_route_output before source address has been
      populated.
      Signed-off-by: NMarkus Stenberg <markus.stenberg@iki.fi>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e16e888b
    • D
      Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth · 0a801445
      David S. Miller 提交于
      Johan Hedberg says:
      
      ====================
      Here are a couple of important Bluetooth & mac802154 fixes for 4.1:
      
       - mac802154 fix for crypto algorithm allocation failure checking
       - mac802154 wpan phy leak fix for error code path
       - Fix for not calling Bluetooth shutdown() if interface is not up
      
      Let me know if there are any issues pulling. Thanks.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0a801445
  2. 06 5月, 2015 7 次提交
  3. 05 5月, 2015 8 次提交
  4. 04 5月, 2015 15 次提交
  5. 02 5月, 2015 5 次提交