diff options
author | Sowmini Varadhan <sowmini.varadhan@oracle.com> | 2018-01-18 16:11:07 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-01-22 15:43:54 -0500 |
commit | b589513e6354a5fd6934823b7fd66bffad41137a (patch) | |
tree | 0d9e892d669ca556ac5ce566d949aa16ae6f0d9a | |
parent | ab18a9c9ca27f8208c4960a1b25e8475b9f9dda5 (diff) |
rds: tcp: compute m_ack_seq as offset from ->write_seq
rds-tcp uses m_ack_seq to track the tcp ack# that indicates
that the peer has received a rds_message. The m_ack_seq is
used in rds_tcp_is_acked() to figure out when it is safe to
drop the rds_message from the RDS retransmit queue.
The m_ack_seq must be calculated as an offset from the right
edge of the in-flight tcp buffer, i.e., it should be based on
the ->write_seq, not the ->snd_nxt.
Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/rds/tcp.c | 5 | ||||
-rw-r--r-- | net/rds/tcp.h | 2 | ||||
-rw-r--r-- | net/rds/tcp_send.c | 4 |
3 files changed, 6 insertions, 5 deletions
diff --git a/net/rds/tcp.c b/net/rds/tcp.c index 6b7ee71f40c6..ab7356e0ba83 100644 --- a/net/rds/tcp.c +++ b/net/rds/tcp.c | |||
@@ -90,9 +90,10 @@ void rds_tcp_nonagle(struct socket *sock) | |||
90 | sizeof(val)); | 90 | sizeof(val)); |
91 | } | 91 | } |
92 | 92 | ||
93 | u32 rds_tcp_snd_nxt(struct rds_tcp_connection *tc) | 93 | u32 rds_tcp_write_seq(struct rds_tcp_connection *tc) |
94 | { | 94 | { |
95 | return tcp_sk(tc->t_sock->sk)->snd_nxt; | 95 | /* seq# of the last byte of data in tcp send buffer */ |
96 | return tcp_sk(tc->t_sock->sk)->write_seq; | ||
96 | } | 97 | } |
97 | 98 | ||
98 | u32 rds_tcp_snd_una(struct rds_tcp_connection *tc) | 99 | u32 rds_tcp_snd_una(struct rds_tcp_connection *tc) |
diff --git a/net/rds/tcp.h b/net/rds/tcp.h index 1aafbf7c3011..864ca7d8f019 100644 --- a/net/rds/tcp.h +++ b/net/rds/tcp.h | |||
@@ -54,7 +54,7 @@ void rds_tcp_set_callbacks(struct socket *sock, struct rds_conn_path *cp); | |||
54 | void rds_tcp_reset_callbacks(struct socket *sock, struct rds_conn_path *cp); | 54 | void rds_tcp_reset_callbacks(struct socket *sock, struct rds_conn_path *cp); |
55 | void rds_tcp_restore_callbacks(struct socket *sock, | 55 | void rds_tcp_restore_callbacks(struct socket *sock, |
56 | struct rds_tcp_connection *tc); | 56 | struct rds_tcp_connection *tc); |
57 | u32 rds_tcp_snd_nxt(struct rds_tcp_connection *tc); | 57 | u32 rds_tcp_write_seq(struct rds_tcp_connection *tc); |
58 | u32 rds_tcp_snd_una(struct rds_tcp_connection *tc); | 58 | u32 rds_tcp_snd_una(struct rds_tcp_connection *tc); |
59 | u64 rds_tcp_map_seq(struct rds_tcp_connection *tc, u32 seq); | 59 | u64 rds_tcp_map_seq(struct rds_tcp_connection *tc, u32 seq); |
60 | extern struct rds_transport rds_tcp_transport; | 60 | extern struct rds_transport rds_tcp_transport; |
diff --git a/net/rds/tcp_send.c b/net/rds/tcp_send.c index dc860d1bb608..9b76e0fa1722 100644 --- a/net/rds/tcp_send.c +++ b/net/rds/tcp_send.c | |||
@@ -86,7 +86,7 @@ int rds_tcp_xmit(struct rds_connection *conn, struct rds_message *rm, | |||
86 | * m_ack_seq is set to the sequence number of the last byte of | 86 | * m_ack_seq is set to the sequence number of the last byte of |
87 | * header and data. see rds_tcp_is_acked(). | 87 | * header and data. see rds_tcp_is_acked(). |
88 | */ | 88 | */ |
89 | tc->t_last_sent_nxt = rds_tcp_snd_nxt(tc); | 89 | tc->t_last_sent_nxt = rds_tcp_write_seq(tc); |
90 | rm->m_ack_seq = tc->t_last_sent_nxt + | 90 | rm->m_ack_seq = tc->t_last_sent_nxt + |
91 | sizeof(struct rds_header) + | 91 | sizeof(struct rds_header) + |
92 | be32_to_cpu(rm->m_inc.i_hdr.h_len) - 1; | 92 | be32_to_cpu(rm->m_inc.i_hdr.h_len) - 1; |
@@ -98,7 +98,7 @@ int rds_tcp_xmit(struct rds_connection *conn, struct rds_message *rm, | |||
98 | rm->m_inc.i_hdr.h_flags |= RDS_FLAG_RETRANSMITTED; | 98 | rm->m_inc.i_hdr.h_flags |= RDS_FLAG_RETRANSMITTED; |
99 | 99 | ||
100 | rdsdebug("rm %p tcp nxt %u ack_seq %llu\n", | 100 | rdsdebug("rm %p tcp nxt %u ack_seq %llu\n", |
101 | rm, rds_tcp_snd_nxt(tc), | 101 | rm, rds_tcp_write_seq(tc), |
102 | (unsigned long long)rm->m_ack_seq); | 102 | (unsigned long long)rm->m_ack_seq); |
103 | } | 103 | } |
104 | 104 | ||