RDS: Add rds_send_path_reset()
rds_send_path_reset() is the path specific version of rds_send_reset() intended for MP capable callers. Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5e833e025d
commit
4e9b551c14
|
@ -63,14 +63,14 @@ static void rds_send_remove_from_sock(struct list_head *messages, int status);
|
||||||
* Reset the send state. Callers must ensure that this doesn't race with
|
* Reset the send state. Callers must ensure that this doesn't race with
|
||||||
* rds_send_xmit().
|
* rds_send_xmit().
|
||||||
*/
|
*/
|
||||||
void rds_send_reset(struct rds_connection *conn)
|
static void rds_send_path_reset(struct rds_conn_path *cp)
|
||||||
{
|
{
|
||||||
struct rds_message *rm, *tmp;
|
struct rds_message *rm, *tmp;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
if (conn->c_xmit_rm) {
|
if (cp->cp_xmit_rm) {
|
||||||
rm = conn->c_xmit_rm;
|
rm = cp->cp_xmit_rm;
|
||||||
conn->c_xmit_rm = NULL;
|
cp->cp_xmit_rm = NULL;
|
||||||
/* Tell the user the RDMA op is no longer mapped by the
|
/* Tell the user the RDMA op is no longer mapped by the
|
||||||
* transport. This isn't entirely true (it's flushed out
|
* transport. This isn't entirely true (it's flushed out
|
||||||
* independently) but as the connection is down, there's
|
* independently) but as the connection is down, there's
|
||||||
|
@ -79,26 +79,31 @@ void rds_send_reset(struct rds_connection *conn)
|
||||||
rds_message_put(rm);
|
rds_message_put(rm);
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->c_xmit_sg = 0;
|
cp->cp_xmit_sg = 0;
|
||||||
conn->c_xmit_hdr_off = 0;
|
cp->cp_xmit_hdr_off = 0;
|
||||||
conn->c_xmit_data_off = 0;
|
cp->cp_xmit_data_off = 0;
|
||||||
conn->c_xmit_atomic_sent = 0;
|
cp->cp_xmit_atomic_sent = 0;
|
||||||
conn->c_xmit_rdma_sent = 0;
|
cp->cp_xmit_rdma_sent = 0;
|
||||||
conn->c_xmit_data_sent = 0;
|
cp->cp_xmit_data_sent = 0;
|
||||||
|
|
||||||
conn->c_map_queued = 0;
|
cp->cp_conn->c_map_queued = 0;
|
||||||
|
|
||||||
conn->c_unacked_packets = rds_sysctl_max_unacked_packets;
|
cp->cp_unacked_packets = rds_sysctl_max_unacked_packets;
|
||||||
conn->c_unacked_bytes = rds_sysctl_max_unacked_bytes;
|
cp->cp_unacked_bytes = rds_sysctl_max_unacked_bytes;
|
||||||
|
|
||||||
/* Mark messages as retransmissions, and move them to the send q */
|
/* Mark messages as retransmissions, and move them to the send q */
|
||||||
spin_lock_irqsave(&conn->c_lock, flags);
|
spin_lock_irqsave(&cp->cp_lock, flags);
|
||||||
list_for_each_entry_safe(rm, tmp, &conn->c_retrans, m_conn_item) {
|
list_for_each_entry_safe(rm, tmp, &cp->cp_retrans, m_conn_item) {
|
||||||
set_bit(RDS_MSG_ACK_REQUIRED, &rm->m_flags);
|
set_bit(RDS_MSG_ACK_REQUIRED, &rm->m_flags);
|
||||||
set_bit(RDS_MSG_RETRANSMITTED, &rm->m_flags);
|
set_bit(RDS_MSG_RETRANSMITTED, &rm->m_flags);
|
||||||
}
|
}
|
||||||
list_splice_init(&conn->c_retrans, &conn->c_send_queue);
|
list_splice_init(&cp->cp_retrans, &cp->cp_send_queue);
|
||||||
spin_unlock_irqrestore(&conn->c_lock, flags);
|
spin_unlock_irqrestore(&cp->cp_lock, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rds_send_reset(struct rds_connection *conn)
|
||||||
|
{
|
||||||
|
rds_send_path_reset(&conn->c_path[0]);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rds_send_reset);
|
EXPORT_SYMBOL_GPL(rds_send_reset);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue