1. 09 May, 2015 5 commits
    • David S. Miller's avatar
      Merge branch 'rds' · d3196a24
      David S. Miller authored
      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: default avatarDavid S. Miller <davem@davemloft.net>
      d3196a24
    • Sowmini Varadhan's avatar
      net/rds: RDS-TCP: only initiate reconnect attempt on outgoing TCP socket. · c82ac7e6
      Sowmini Varadhan authored
      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: default avatarSowmini Varadhan <sowmini.varadhan@oracle.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c82ac7e6
    • Sowmini Varadhan's avatar
      net/rds: RDS-TCP: Always create a new rds_sock for an incoming connection. · f711a6ae
      Sowmini Varadhan authored
      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: default avatarSowmini Varadhan <sowmini.varadhan@oracle.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f711a6ae
    • Markus Stenberg's avatar
      ipv6: Fixed source specific default route handling. · e16e888b
      Markus Stenberg authored
      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: default avatarMarkus Stenberg <markus.stenberg@iki.fi>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e16e888b
    • David S. Miller's avatar
      Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth · 0a801445
      David S. Miller authored
      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: default avatarDavid S. Miller <davem@davemloft.net>
      0a801445
  2. 05 May, 2015 7 commits
  3. 04 May, 2015 21 commits
  4. 03 May, 2015 2 commits
  5. 02 May, 2015 5 commits