• Jon Paul Maloy's avatar
    tipc: simplify connection congestion handling · 60120526
    Jon Paul Maloy authored
    As a consequence of the recently introduced serialized access
    to the socket in commit 8d94168a761819d10252bab1f8de6d7b202c3baa
    ("tipc: same receive code path for connection protocol and data
    messages") we can make a number of simplifications in the
    detection and handling of connection congestion situations.
    
    - We don't need to keep two counters, one for sent messages and one
      for acked messages. There is no longer any risk for races between
      acknowledge messages arriving in BH and data message sending
      running in user context. So we merge this into one counter,
      'sent_unacked', which is incremented at sending and subtracted
      from at acknowledge reception.
    
    - We don't need to set the 'congested' field in tipc_port to
      true before we sent the message, and clear it when sending
      is successful. (As a matter of fact, it was never necessary;
      the field was set in link_schedule_port() before any wakeup
      could arrive anyway.)
    
    - We keep the conditions for link congestion and connection connection
      congestion separated. There would otherwise be a risk that an arriving
      acknowledge message may wake up a user sleeping because of link
      congestion.
    
    - We can simplify reception of acknowledge messages.
    
    We also make some cosmetic/structural changes:
    
    - We rename the 'congested' field to the more correct 'link_cong´.
    
    - We rename 'conn_unacked' to 'rcv_unacked'
    
    - We move the above mentioned fields from struct tipc_port to
      struct tipc_sock.
    Signed-off-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
    Reviewed-by: default avatarYing Xue <ying.xue@windriver.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    60120526
link.c 70.2 KB