Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mptcp: pm: rename 'subflows' to 'extra_subflows'

A few variables linked to the Path-Managers are confusing, and it would
help current and future developers, to clarify them.

One of them is 'subflows', which in fact represents the number of extra
subflows: all the additional subflows created after the initial one, and
not the total number of subflows.

While at it, add an additional name for the corresponding variable in
MPTCP INFO: mptcpi_extra_subflows. Not to break the current uAPI, the
new name is added as a 'define' pointing to the former name. This will
then also help userspace devs.

No functional changes intended.

Reviewed-by: Geliang Tang <geliang@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20250925-net-next-mptcp-c-flag-laminar-v1-5-ad126cc47c6b@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Matthieu Baerts (NGI0) and committed by
Jakub Kicinski
c5273f6c a845b2bb

+27 -25
+1
include/uapi/linux/mptcp.h
··· 42 42 43 43 struct mptcp_info { 44 44 __u8 mptcpi_subflows; 45 + #define mptcpi_extra_subflows mptcpi_subflows 45 46 __u8 mptcpi_add_addr_signal; 46 47 __u8 mptcpi_add_addr_accepted; 47 48 __u8 mptcpi_subflows_max;
+7 -6
net/mptcp/pm.c
··· 489 489 if (mptcp_pm_is_userspace(msk)) { 490 490 if (mptcp_userspace_pm_active(msk)) { 491 491 spin_lock_bh(&pm->lock); 492 - pm->subflows++; 492 + pm->extra_subflows++; 493 493 spin_unlock_bh(&pm->lock); 494 494 return true; 495 495 } ··· 498 498 499 499 subflows_max = mptcp_pm_get_subflows_max(msk); 500 500 501 - pr_debug("msk=%p subflows=%d max=%d allow=%d\n", msk, pm->subflows, 502 - subflows_max, READ_ONCE(pm->accept_subflow)); 501 + pr_debug("msk=%p subflows=%d max=%d allow=%d\n", msk, 502 + pm->extra_subflows, subflows_max, 503 + READ_ONCE(pm->accept_subflow)); 503 504 504 505 /* try to avoid acquiring the lock below */ 505 506 if (!READ_ONCE(pm->accept_subflow)) ··· 508 507 509 508 spin_lock_bh(&pm->lock); 510 509 if (READ_ONCE(pm->accept_subflow)) { 511 - ret = pm->subflows < subflows_max; 512 - if (ret && ++pm->subflows == subflows_max) 510 + ret = pm->extra_subflows < subflows_max; 511 + if (ret && ++pm->extra_subflows == subflows_max) 513 512 WRITE_ONCE(pm->accept_subflow, false); 514 513 } 515 514 spin_unlock_bh(&pm->lock); ··· 595 594 if (mptcp_pm_is_userspace(msk)) { 596 595 if (update_subflows) { 597 596 spin_lock_bh(&pm->lock); 598 - pm->subflows--; 597 + pm->extra_subflows--; 599 598 spin_unlock_bh(&pm->lock); 600 599 } 601 600 return;
+12 -12
net/mptcp/pm_kernel.c
··· 175 175 if (!mptcp_pm_addr_families_match(sk, local, &remote)) 176 176 return 0; 177 177 178 - msk->pm.subflows++; 178 + msk->pm.extra_subflows++; 179 179 *addrs = remote; 180 180 181 181 return 1; ··· 218 218 219 219 /* forbid creating multiple address towards this id */ 220 220 __set_bit(addrs[i].id, unavail_id); 221 - msk->pm.subflows++; 221 + msk->pm.extra_subflows++; 222 222 i++; 223 223 224 - if (msk->pm.subflows >= subflows_max) 224 + if (msk->pm.extra_subflows >= subflows_max) 225 225 break; 226 226 } 227 227 ··· 313 313 pr_debug("local %d:%d signal %d:%d subflows %d:%d\n", 314 314 msk->pm.local_addr_used, local_addr_max, 315 315 msk->pm.add_addr_signaled, add_addr_signal_max, 316 - msk->pm.subflows, subflows_max); 316 + msk->pm.extra_subflows, subflows_max); 317 317 318 318 /* check first for announce */ 319 319 if (msk->pm.add_addr_signaled < add_addr_signal_max) { ··· 353 353 subflow: 354 354 /* check if should create a new subflow */ 355 355 while (msk->pm.local_addr_used < local_addr_max && 356 - msk->pm.subflows < subflows_max) { 356 + msk->pm.extra_subflows < subflows_max) { 357 357 struct mptcp_addr_info addrs[MPTCP_PM_ADDR_MAX]; 358 358 bool fullmesh; 359 359 int i, nr; ··· 441 441 if (is_id0) 442 442 local->addr.id = 0; 443 443 444 - msk->pm.subflows++; 444 + msk->pm.extra_subflows++; 445 445 i++; 446 446 447 - if (msk->pm.subflows >= subflows_max) 447 + if (msk->pm.extra_subflows >= subflows_max) 448 448 break; 449 449 } 450 450 rcu_read_unlock(); ··· 483 483 continue; 484 484 485 485 msk->pm.local_addr_used++; 486 - msk->pm.subflows++; 486 + msk->pm.extra_subflows++; 487 487 i++; 488 488 489 - if (msk->pm.subflows >= subflows_max) 489 + if (msk->pm.extra_subflows >= subflows_max) 490 490 break; 491 491 } 492 492 ··· 510 510 if (!mptcp_pm_addr_families_match(sk, &local->addr, remote)) 511 511 return 0; 512 512 513 - msk->pm.subflows++; 513 + msk->pm.extra_subflows++; 514 514 515 515 return 1; 516 516 } ··· 586 586 if (remote.id) 587 587 msk->pm.add_addr_accepted++; 588 588 if (msk->pm.add_addr_accepted >= add_addr_accept_max || 589 - msk->pm.subflows >= subflows_max) 589 + msk->pm.extra_subflows >= subflows_max) 590 590 WRITE_ONCE(msk->pm.accept_addr, false); 591 591 } 592 592 } ··· 1427 1427 { 1428 1428 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); 1429 1429 1430 - if (msk->pm.subflows == mptcp_pm_get_subflows_max(msk) || 1430 + if (msk->pm.extra_subflows == mptcp_pm_get_subflows_max(msk) || 1431 1431 (find_next_and_bit(pernet->id_bitmap, msk->pm.id_avail_bitmap, 1432 1432 MPTCP_PM_MAX_ADDR_ID + 1, 0) == MPTCP_PM_MAX_ADDR_ID + 1)) { 1433 1433 WRITE_ONCE(msk->pm.work_pending, false);
+1 -1
net/mptcp/pm_userspace.c
··· 419 419 if (err) 420 420 mptcp_userspace_pm_delete_local_addr(msk, &entry); 421 421 else 422 - msk->pm.subflows++; 422 + msk->pm.extra_subflows++; 423 423 spin_unlock_bh(&msk->pm.lock); 424 424 425 425 create_err:
+3 -3
net/mptcp/protocol.h
··· 235 235 u8 add_addr_accepted; 236 236 u8 local_addr_used; 237 237 u8 pm_type; 238 - u8 subflows; 238 + u8 extra_subflows; 239 239 u8 status; 240 240 241 241 ); ··· 1188 1188 /* called under PM lock */ 1189 1189 static inline void __mptcp_pm_close_subflow(struct mptcp_sock *msk) 1190 1190 { 1191 - if (--msk->pm.subflows < mptcp_pm_get_subflows_max(msk)) 1191 + if (--msk->pm.extra_subflows < mptcp_pm_get_subflows_max(msk)) 1192 1192 WRITE_ONCE(msk->pm.accept_subflow, true); 1193 1193 } 1194 1194 ··· 1204 1204 return READ_ONCE(msk->pm.remote_deny_join_id0) && 1205 1205 msk->pm.local_addr_used == 0 && 1206 1206 mptcp_pm_get_add_addr_accept_max(msk) == 0 && 1207 - msk->pm.subflows < mptcp_pm_get_subflows_max(msk); 1207 + msk->pm.extra_subflows < mptcp_pm_get_subflows_max(msk); 1208 1208 } 1209 1209 1210 1210 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk);
+2 -2
net/mptcp/sockopt.c
··· 962 962 963 963 memset(info, 0, sizeof(*info)); 964 964 965 - info->mptcpi_subflows = READ_ONCE(msk->pm.subflows); 965 + info->mptcpi_extra_subflows = READ_ONCE(msk->pm.extra_subflows); 966 966 info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled); 967 967 info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted); 968 968 info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used); ··· 996 996 info->mptcpi_bytes_sent = msk->bytes_sent; 997 997 info->mptcpi_bytes_received = msk->bytes_received; 998 998 info->mptcpi_bytes_retrans = msk->bytes_retrans; 999 - info->mptcpi_subflows_total = info->mptcpi_subflows + 999 + info->mptcpi_subflows_total = info->mptcpi_extra_subflows + 1000 1000 __mptcp_has_initial_subflow(msk); 1001 1001 now = tcp_jiffies32; 1002 1002 info->mptcpi_last_data_sent = jiffies_to_msecs(now - msk->last_data_sent);
+1 -1
tools/testing/selftests/bpf/progs/mptcp_subflow.c
··· 117 117 return 1; 118 118 119 119 msk = bpf_core_cast(sk, struct mptcp_sock); 120 - if (msk->pm.subflows != 1) { 120 + if (msk->pm.extra_subflows != 1) { 121 121 ctx->retval = -1; 122 122 return 1; 123 123 }