[rds-devel] [PATCH 15/19] Make RDS over TCP statstics really works.
Jie Liu
jeff.liu at oracle.com
Sun Oct 7 05:18:07 PDT 2012
- Teach stats_info_copy aware of struct net.
- Teach rds_tcp_stats_inc macro aware of struct net.
Signed-off-by: Jie Liu <jeff.liu at oracle.com>
---
net/rds/rds.h | 3 ++-
net/rds/tcp.h | 7 ++++---
net/rds/tcp_listen.c | 4 ++--
net/rds/tcp_recv.c | 3 ++-
net/rds/tcp_send.c | 7 +++++--
net/rds/tcp_stats.c | 3 ++-
net/rds/transport.c | 2 +-
7 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/net/rds/rds.h b/net/rds/rds.h
index f282b7e..a106a0d 100644
--- a/net/rds/rds.h
+++ b/net/rds/rds.h
@@ -448,7 +448,8 @@ struct rds_transport {
void (*cm_connect_complete)(struct rds_connection *conn,
struct rdma_cm_event *event);
- unsigned int (*stats_info_copy)(struct rds_info_iterator *iter,
+ unsigned int (*stats_info_copy)(struct net *net,
+ struct rds_info_iterator *iter,
unsigned int avail);
void (*exit)(struct net *net);
void *(*get_mr)(struct scatterlist *sg, unsigned long nr_sg,
diff --git a/net/rds/tcp.h b/net/rds/tcp.h
index fee5ef6..68eb685 100644
--- a/net/rds/tcp.h
+++ b/net/rds/tcp.h
@@ -80,9 +80,10 @@ int rds_tcp_xmit(struct rds_connection *conn, struct rds_message *rm,
void rds_tcp_write_space(struct sock *sk);
/* tcp_stats.c */
-DECLARE_PER_CPU(struct rds_tcp_statistics, rds_tcp_stats);
-#define rds_tcp_stats_inc(member) rds_stats_inc_which(rds_tcp_stats, member)
-unsigned int rds_tcp_stats_info_copy(struct rds_info_iterator *iter,
+#define rds_tcp_stats_inc(net, member) \
+ rds_stats_inc_which((*(net->rds.rds_tcp_stats)), member)
+unsigned int rds_tcp_stats_info_copy(struct net *net,
+ struct rds_info_iterator *iter,
unsigned int avail);
#endif
diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c
index 31d3a0d..1e94ca4 100644
--- a/net/rds/tcp_listen.c
+++ b/net/rds/tcp_listen.c
@@ -84,9 +84,9 @@ static int rds_tcp_accept_one(struct socket *sock)
*/
if (!rds_conn_transition(conn, RDS_CONN_DOWN, RDS_CONN_CONNECTING)) {
if (rds_conn_state(conn) == RDS_CONN_UP)
- rds_tcp_stats_inc(s_tcp_listen_closed_stale);
+ rds_tcp_stats_inc(net, s_tcp_listen_closed_stale);
else
- rds_tcp_stats_inc(s_tcp_connect_raced);
+ rds_tcp_stats_inc(net, s_tcp_connect_raced);
rds_conn_drop(conn);
ret = 0;
goto out;
diff --git a/net/rds/tcp_recv.c b/net/rds/tcp_recv.c
index 641ab5d..fbf073f 100644
--- a/net/rds/tcp_recv.c
+++ b/net/rds/tcp_recv.c
@@ -319,6 +319,7 @@ int rds_tcp_recv(struct rds_connection *conn)
void rds_tcp_data_ready(struct sock *sk, int bytes)
{
+ struct net *net = sock_net(sk);
void (*ready)(struct sock *sk, int bytes);
struct rds_connection *conn;
struct rds_tcp_connection *tc;
@@ -334,7 +335,7 @@ void rds_tcp_data_ready(struct sock *sk, int bytes)
tc = conn->c_transport_data;
ready = tc->t_orig_data_ready;
- rds_tcp_stats_inc(s_tcp_data_ready_calls);
+ rds_tcp_stats_inc(net, s_tcp_data_ready_calls);
if (rds_tcp_read_sock(conn, GFP_ATOMIC) == -ENOMEM)
queue_delayed_work(rds_wq, &conn->c_recv_w, 0);
diff --git a/net/rds/tcp_send.c b/net/rds/tcp_send.c
index 1b4fd68..85c7b72 100644
--- a/net/rds/tcp_send.c
+++ b/net/rds/tcp_send.c
@@ -140,7 +140,9 @@ out:
if (ret <= 0) {
/* write_space will hit after EAGAIN, all else fatal */
if (ret == -EAGAIN) {
- rds_tcp_stats_inc(s_tcp_sndbuf_full);
+ struct net *net = rds_conn_to_net(conn);
+
+ rds_tcp_stats_inc(net, s_tcp_sndbuf_full);
ret = 0;
} else {
printk(KERN_WARNING "RDS/tcp: send to %pI4 "
@@ -170,6 +172,7 @@ static int rds_tcp_is_acked(struct rds_message *rm, uint64_t ack)
void rds_tcp_write_space(struct sock *sk)
{
+ struct net *net = sock_net(sk);
void (*write_space)(struct sock *sk);
struct rds_connection *conn;
struct rds_tcp_connection *tc;
@@ -184,7 +187,7 @@ void rds_tcp_write_space(struct sock *sk)
tc = conn->c_transport_data;
rdsdebug("write_space for tc %p\n", tc);
write_space = tc->t_orig_write_space;
- rds_tcp_stats_inc(s_tcp_write_space_calls);
+ rds_tcp_stats_inc(net, s_tcp_write_space_calls);
rdsdebug("tcp una %u\n", rds_tcp_snd_una(tc));
tc->t_last_seen_una = rds_tcp_snd_una(tc);
diff --git a/net/rds/tcp_stats.c b/net/rds/tcp_stats.c
index f8a7954..09a3fc0 100644
--- a/net/rds/tcp_stats.c
+++ b/net/rds/tcp_stats.c
@@ -48,7 +48,8 @@ static const char * const rds_tcp_stat_names[] = {
"tcp_listen_closed_stale",
};
-unsigned int rds_tcp_stats_info_copy(struct rds_info_iterator *iter,
+unsigned int rds_tcp_stats_info_copy(struct net *net,
+ struct rds_info_iterator *iter,
unsigned int avail)
{
struct rds_tcp_statistics stats = {0, };
diff --git a/net/rds/transport.c b/net/rds/transport.c
index 28dd771..af1dfad 100644
--- a/net/rds/transport.c
+++ b/net/rds/transport.c
@@ -126,7 +126,7 @@ unsigned int rds_trans_stats_info_copy(struct net *net,
if (!trans || !trans->stats_info_copy)
continue;
- part = trans->stats_info_copy(iter, avail);
+ part = trans->stats_info_copy(net, iter, avail);
avail -= min(avail, part);
total += part;
}
--
1.7.4.1
More information about the rds-devel
mailing list