]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
rds: tcp: compute m_ack_seq as offset from ->write_seq
authorSowmini Varadhan <sowmini.varadhan@oracle.com>
Thu, 18 Jan 2018 21:11:07 +0000 (13:11 -0800)
committerBrian Maly <brian.maly@oracle.com>
Tue, 26 Jun 2018 19:01:17 +0000 (15:01 -0400)
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>
(cherry picked from commit b589513e6354a5fd6934823b7fd66bffad41137a)

Orabug: 28085214

Signed-off-by: Hans Westgaard Ry <hans.westgaard.ry@oracle.com>
Reviewed-by: Qing Huang <qing.huang@oracle.com>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
net/rds/tcp.c
net/rds/tcp.h
net/rds/tcp_send.c

index 72d1b915f83fb4a930106f589eb94df0128c19d9..739f977c538eedd2fb7aba817db259a7c2f5df21 100644 (file)
@@ -97,9 +97,10 @@ void rds_tcp_nonagle(struct socket *sock)
        set_fs(oldfs);
 }
 
-u32 rds_tcp_snd_nxt(struct rds_tcp_connection *tc)
+u32 rds_tcp_write_seq(struct rds_tcp_connection *tc)
 {
-       return tcp_sk(tc->t_sock->sk)->snd_nxt;
+       /* seq# of the last byte of data in tcp send buffer */
+       return tcp_sk(tc->t_sock->sk)->write_seq;
 }
 
 u32 rds_tcp_snd_una(struct rds_tcp_connection *tc)
index c4fbafc2ef5aab3ca70df247ec14fa45748585f7..af83415bda49885cedb74e10f78aa13979234774 100644 (file)
@@ -51,7 +51,7 @@ void rds_tcp_set_callbacks(struct socket *sock, struct rds_conn_path *cp);
 void rds_tcp_reset_callbacks(struct socket *sock, struct rds_conn_path *cp);
 void rds_tcp_restore_callbacks(struct socket *sock,
                               struct rds_tcp_connection *tc);
-u32 rds_tcp_snd_nxt(struct rds_tcp_connection *tc);
+u32 rds_tcp_write_seq(struct rds_tcp_connection *tc);
 u32 rds_tcp_snd_una(struct rds_tcp_connection *tc);
 u64 rds_tcp_map_seq(struct rds_tcp_connection *tc, u32 seq);
 extern struct rds_transport rds_tcp_transport;
index cb10a6fb39c1cdcc9d4f4ed98a359e16e9f8590b..8dd3b8ccbe6f9dd176d11d361fcbe3caf976fd66 100644 (file)
@@ -91,7 +91,7 @@ int rds_tcp_xmit(struct rds_connection *conn, struct rds_message *rm,
                 * m_ack_seq is set to the sequence number of the last byte of
                 * header and data.  see rds_tcp_is_acked().
                 */
-               tc->t_last_sent_nxt = rds_tcp_snd_nxt(tc);
+               tc->t_last_sent_nxt = rds_tcp_write_seq(tc);
                rm->m_ack_seq = tc->t_last_sent_nxt +
                                sizeof(struct rds_header) +
                                be32_to_cpu(rm->m_inc.i_hdr.h_len) - 1;
@@ -103,7 +103,7 @@ int rds_tcp_xmit(struct rds_connection *conn, struct rds_message *rm,
                        rm->m_inc.i_hdr.h_flags |= RDS_FLAG_RETRANSMITTED;
 
                rdsdebug("rm %p tcp nxt %u ack_seq %llu\n",
-                        rm, rds_tcp_snd_nxt(tc),
+                        rm, rds_tcp_write_seq(tc),
                         (unsigned long long)rm->m_ack_seq);
        }