Skip to content

Commit c558246

Browse files
menglongdongdavem330
authored andcommitted
mptcp: add statistics for mptcp socket in use
Do the statistics of mptcp socket in use with sock_prot_inuse_add(). Therefore, we can get the count of used mptcp socket from /proc/net/protocols: & cat /proc/net/protocols protocol size sockets memory press maxhdr slab module cl co di ac io in de sh ss gs se re sp bi br ha uh gp em MPTCPv6 2048 0 0 no 0 yes kernel y n y y y y y y y y y y n n n y y y n MPTCP 1896 1 0 no 0 yes kernel y n y y y y y y y y y y n n n y y y n Acked-by: Paolo Abeni <[email protected]> Signed-off-by: Menglong Dong <[email protected]> Signed-off-by: Mat Martineau <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 294de90 commit c558246

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

net/mptcp/protocol.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2891,6 +2891,12 @@ static __poll_t mptcp_check_readable(struct mptcp_sock *msk)
28912891
return EPOLLIN | EPOLLRDNORM;
28922892
}
28932893

2894+
static void mptcp_listen_inuse_dec(struct sock *sk)
2895+
{
2896+
if (inet_sk_state_load(sk) == TCP_LISTEN)
2897+
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
2898+
}
2899+
28942900
bool __mptcp_close(struct sock *sk, long timeout)
28952901
{
28962902
struct mptcp_subflow_context *subflow;
@@ -2900,6 +2906,7 @@ bool __mptcp_close(struct sock *sk, long timeout)
29002906
sk->sk_shutdown = SHUTDOWN_MASK;
29012907

29022908
if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE)) {
2909+
mptcp_listen_inuse_dec(sk);
29032910
inet_sk_state_store(sk, TCP_CLOSE);
29042911
goto cleanup;
29052912
}
@@ -3000,6 +3007,7 @@ static int mptcp_disconnect(struct sock *sk, int flags)
30003007
if (msk->fastopening)
30013008
return 0;
30023009

3010+
mptcp_listen_inuse_dec(sk);
30033011
inet_sk_state_store(sk, TCP_CLOSE);
30043012

30053013
mptcp_stop_timer(sk);
@@ -3657,8 +3665,10 @@ static int mptcp_listen(struct socket *sock, int backlog)
36573665

36583666
err = ssock->ops->listen(ssock, backlog);
36593667
inet_sk_state_store(sk, inet_sk_state_load(ssock->sk));
3660-
if (!err)
3668+
if (!err) {
3669+
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
36613670
mptcp_copy_inaddrs(sk, ssock->sk);
3671+
}
36623672

36633673
mptcp_event_pm_listener(ssock->sk, MPTCP_EVENT_LISTENER_CREATED);
36643674

net/mptcp/token.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ int mptcp_token_new_connect(struct sock *ssk)
153153
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
154154
struct mptcp_sock *msk = mptcp_sk(subflow->conn);
155155
int retries = MPTCP_TOKEN_MAX_RETRIES;
156+
struct sock *sk = subflow->conn;
156157
struct token_bucket *bucket;
157158

158159
again:
@@ -175,6 +176,7 @@ int mptcp_token_new_connect(struct sock *ssk)
175176
__sk_nulls_add_node_rcu((struct sock *)msk, &bucket->msk_chain);
176177
bucket->chain_len++;
177178
spin_unlock_bh(&bucket->lock);
179+
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
178180
return 0;
179181
}
180182

@@ -190,8 +192,10 @@ void mptcp_token_accept(struct mptcp_subflow_request_sock *req,
190192
struct mptcp_sock *msk)
191193
{
192194
struct mptcp_subflow_request_sock *pos;
195+
struct sock *sk = (struct sock *)msk;
193196
struct token_bucket *bucket;
194197

198+
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
195199
bucket = token_bucket(req->token);
196200
spin_lock_bh(&bucket->lock);
197201

@@ -370,12 +374,14 @@ void mptcp_token_destroy_request(struct request_sock *req)
370374
*/
371375
void mptcp_token_destroy(struct mptcp_sock *msk)
372376
{
377+
struct sock *sk = (struct sock *)msk;
373378
struct token_bucket *bucket;
374379
struct mptcp_sock *pos;
375380

376381
if (sk_unhashed((struct sock *)msk))
377382
return;
378383

384+
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
379385
bucket = token_bucket(msk->token);
380386
spin_lock_bh(&bucket->lock);
381387
pos = __token_lookup_msk(bucket, msk->token);

0 commit comments

Comments
 (0)