From: Greg Kroah-Hartman Date: Tue, 1 Feb 2022 14:32:42 +0000 (+0100) Subject: remove some 4.16 mptcp patches X-Git-Tag: v5.4.176~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=30544b7c717fecd1e9cae8966c69bdb8056b4f14;p=thirdparty%2Fkernel%2Fstable-queue.git remove some 4.16 mptcp patches --- diff --git a/queue-5.16/mptcp-allow-changing-the-backup-bit-by-endpoint-id.patch b/queue-5.16/mptcp-allow-changing-the-backup-bit-by-endpoint-id.patch deleted file mode 100644 index 0fed02df45d..00000000000 --- a/queue-5.16/mptcp-allow-changing-the-backup-bit-by-endpoint-id.patch +++ /dev/null @@ -1,61 +0,0 @@ -From eb7f9d6cba65c10ac7ea3de04a6c34c44a1dc823 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 3 Dec 2021 14:35:36 -0800 -Subject: mptcp: allow changing the "backup" bit by endpoint id - -From: Davide Caratti - -[ Upstream commit 602837e8479d20d49559b4b97b79d34c0efe7ecb ] - -a non-zero 'id' is sufficient to identify MPTCP endpoints: allow changing -the value of 'backup' bit by simply specifying the endpoint id. - -Link: https://github.com/multipath-tcp/mptcp_net-next/issues/158 -Signed-off-by: Davide Caratti -Signed-off-by: Mat Martineau -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - net/mptcp/pm_netlink.c | 14 ++++++++++---- - 1 file changed, 10 insertions(+), 4 deletions(-) - -diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c -index 65764c8171b37..d18b13e3e74c6 100644 ---- a/net/mptcp/pm_netlink.c -+++ b/net/mptcp/pm_netlink.c -@@ -1711,22 +1711,28 @@ next: - - static int mptcp_nl_cmd_set_flags(struct sk_buff *skb, struct genl_info *info) - { -+ struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, }, *entry; - struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR]; - struct pm_nl_pernet *pernet = genl_info_pm_nl(info); -- struct mptcp_pm_addr_entry addr, *entry; - struct net *net = sock_net(skb->sk); -- u8 bkup = 0; -+ u8 bkup = 0, lookup_by_id = 0; - int ret; - -- ret = mptcp_pm_parse_addr(attr, info, true, &addr); -+ ret = mptcp_pm_parse_addr(attr, info, false, &addr); - if (ret < 0) - return ret; - - if (addr.flags & MPTCP_PM_ADDR_FLAG_BACKUP) - bkup = 1; -+ if (addr.addr.family == AF_UNSPEC) { -+ lookup_by_id = 1; -+ if (!addr.addr.id) -+ return -EOPNOTSUPP; -+ } - - list_for_each_entry(entry, &pernet->local_addr_list, list) { -- if (addresses_equal(&entry->addr, &addr.addr, true)) { -+ if ((!lookup_by_id && addresses_equal(&entry->addr, &addr.addr, true)) || -+ (lookup_by_id && entry->addr.id == addr.addr.id)) { - mptcp_nl_addr_backup(net, &entry->addr, bkup); - - if (bkup) --- -2.34.1 - diff --git a/queue-5.16/mptcp-clean-up-harmless-false-expressions.patch b/queue-5.16/mptcp-clean-up-harmless-false-expressions.patch deleted file mode 100644 index 702fac979c4..00000000000 --- a/queue-5.16/mptcp-clean-up-harmless-false-expressions.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 5052aaecb42c59d4884c6105bccaa52b4c20b9f0 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 17 Dec 2021 15:37:02 -0800 -Subject: mptcp: clean up harmless false expressions - -From: Jean Sacren - -[ Upstream commit 59060a47ca50bbdb1d863b73667a1065873ecc06 ] - -entry->addr.id is u8 with a range from 0 to 255 and MAX_ADDR_ID is 255. -We should drop both false expressions of (entry->addr.id > MAX_ADDR_ID). - -We should also remove the obsolete parentheses in the first if branch. - -Use U8_MAX for MAX_ADDR_ID and add a comment to show the link to -mptcp_addr_info.id as suggested by Mr. Matthieu Baerts. - -Reviewed-by: Matthieu Baerts -Signed-off-by: Jean Sacren -Signed-off-by: Mat Martineau -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - net/mptcp/pm_netlink.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c -index d18b13e3e74c6..27427aeeee0e5 100644 ---- a/net/mptcp/pm_netlink.c -+++ b/net/mptcp/pm_netlink.c -@@ -38,7 +38,8 @@ struct mptcp_pm_add_entry { - u8 retrans_times; - }; - --#define MAX_ADDR_ID 255 -+/* max value of mptcp_addr_info.id */ -+#define MAX_ADDR_ID U8_MAX - #define BITMAP_SZ DIV_ROUND_UP(MAX_ADDR_ID + 1, BITS_PER_LONG) - - struct pm_nl_pernet { -@@ -831,14 +832,13 @@ find_next: - entry->addr.id = find_next_zero_bit(pernet->id_bitmap, - MAX_ADDR_ID + 1, - pernet->next_id); -- if ((!entry->addr.id || entry->addr.id > MAX_ADDR_ID) && -- pernet->next_id != 1) { -+ if (!entry->addr.id && pernet->next_id != 1) { - pernet->next_id = 1; - goto find_next; - } - } - -- if (!entry->addr.id || entry->addr.id > MAX_ADDR_ID) -+ if (!entry->addr.id) - goto out; - - __set_bit(entry->addr.id, pernet->id_bitmap); --- -2.34.1 - diff --git a/queue-5.16/mptcp-fix-msk-traversal-in-mptcp_nl_cmd_set_flags.patch b/queue-5.16/mptcp-fix-msk-traversal-in-mptcp_nl_cmd_set_flags.patch deleted file mode 100644 index f7e2a87b691..00000000000 --- a/queue-5.16/mptcp-fix-msk-traversal-in-mptcp_nl_cmd_set_flags.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 622b4e082fb4909b54cb0388b832e337b7ad775b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 20 Jan 2022 16:35:27 -0800 -Subject: mptcp: fix msk traversal in mptcp_nl_cmd_set_flags() - -From: Paolo Abeni - -[ Upstream commit 8e9eacad7ec7a9cbf262649ebf1fa6e6f6cc7d82 ] - -The MPTCP endpoint list is under RCU protection, guarded by the -pernet spinlock. mptcp_nl_cmd_set_flags() traverses the list -without acquiring the spin-lock nor under the RCU critical section. - -This change addresses the issue performing the lookup and the endpoint -update under the pernet spinlock. - -Fixes: 0f9f696a502e ("mptcp: add set_flags command in PM netlink") -Signed-off-by: Paolo Abeni -Signed-off-by: Mat Martineau -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - net/mptcp/pm_netlink.c | 37 +++++++++++++++++++++++++++---------- - 1 file changed, 27 insertions(+), 10 deletions(-) - -diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c -index ad3dc9c6c5310..35abcce604b4d 100644 ---- a/net/mptcp/pm_netlink.c -+++ b/net/mptcp/pm_netlink.c -@@ -469,6 +469,20 @@ __lookup_addr_by_id(struct pm_nl_pernet *pernet, unsigned int id) - return NULL; - } - -+static struct mptcp_pm_addr_entry * -+__lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *info, -+ bool lookup_by_id) -+{ -+ struct mptcp_pm_addr_entry *entry; -+ -+ list_for_each_entry(entry, &pernet->local_addr_list, list) { -+ if ((!lookup_by_id && addresses_equal(&entry->addr, info, true)) || -+ (lookup_by_id && entry->addr.id == info->id)) -+ return entry; -+ } -+ return NULL; -+} -+ - static int - lookup_id_by_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *addr) - { -@@ -1753,18 +1767,21 @@ static int mptcp_nl_cmd_set_flags(struct sk_buff *skb, struct genl_info *info) - return -EOPNOTSUPP; - } - -- list_for_each_entry(entry, &pernet->local_addr_list, list) { -- if ((!lookup_by_id && addresses_equal(&entry->addr, &addr.addr, true)) || -- (lookup_by_id && entry->addr.id == addr.addr.id)) { -- mptcp_nl_addr_backup(net, &entry->addr, bkup); -- -- if (bkup) -- entry->flags |= MPTCP_PM_ADDR_FLAG_BACKUP; -- else -- entry->flags &= ~MPTCP_PM_ADDR_FLAG_BACKUP; -- } -+ spin_lock_bh(&pernet->lock); -+ entry = __lookup_addr(pernet, &addr.addr, lookup_by_id); -+ if (!entry) { -+ spin_unlock_bh(&pernet->lock); -+ return -EINVAL; - } - -+ if (bkup) -+ entry->flags |= MPTCP_PM_ADDR_FLAG_BACKUP; -+ else -+ entry->flags &= ~MPTCP_PM_ADDR_FLAG_BACKUP; -+ addr = *entry; -+ spin_unlock_bh(&pernet->lock); -+ -+ mptcp_nl_addr_backup(net, &addr.addr, bkup); - return 0; - } - --- -2.34.1 - diff --git a/queue-5.16/mptcp-fix-removing-ids-bitmap-setting.patch b/queue-5.16/mptcp-fix-removing-ids-bitmap-setting.patch deleted file mode 100644 index a1a7e1a0f7b..00000000000 --- a/queue-5.16/mptcp-fix-removing-ids-bitmap-setting.patch +++ /dev/null @@ -1,38 +0,0 @@ -From d4715857c6a53e84fd13e68457b44f65890cc1ba Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 20 Jan 2022 16:35:28 -0800 -Subject: mptcp: fix removing ids bitmap setting - -From: Geliang Tang - -[ Upstream commit a4c0214fbee97c46e3f41fee37931d66c0fc3cb1 ] - -In mptcp_pm_nl_rm_addr_or_subflow(), the bit of rm_list->ids[i] in the -id_avail_bitmap should be set, not rm_list->ids[1]. This patch fixed it. - -Fixes: 86e39e04482b ("mptcp: keep track of local endpoint still available for each msk") -Acked-by: Paolo Abeni -Signed-off-by: Geliang Tang -Signed-off-by: Mat Martineau -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - net/mptcp/pm_netlink.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c -index 35abcce604b4d..14e6d6f745186 100644 ---- a/net/mptcp/pm_netlink.c -+++ b/net/mptcp/pm_netlink.c -@@ -781,7 +781,7 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp_sock *msk, - msk->pm.subflows--; - __MPTCP_INC_STATS(sock_net(sk), rm_type); - } -- __set_bit(rm_list->ids[1], msk->pm.id_avail_bitmap); -+ __set_bit(rm_list->ids[i], msk->pm.id_avail_bitmap); - if (!removed) - continue; - --- -2.34.1 - diff --git a/queue-5.16/mptcp-keep-track-of-local-endpoint-still-available-f.patch b/queue-5.16/mptcp-keep-track-of-local-endpoint-still-available-f.patch deleted file mode 100644 index 6b6004ee053..00000000000 --- a/queue-5.16/mptcp-keep-track-of-local-endpoint-still-available-f.patch +++ /dev/null @@ -1,404 +0,0 @@ -From 5aa8e18f9e47e78e4bc5b9284c59244253bfc4a5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 6 Jan 2022 16:20:22 -0800 -Subject: mptcp: keep track of local endpoint still available for each msk - -From: Paolo Abeni - -[ Upstream commit 86e39e04482b0aadf3ee3ed5fcf2d63816559d36 ] - -Include into the path manager status a bitmap tracking the list -of local endpoints still available - not yet used - for the -relevant mptcp socket. - -Keep such map updated at endpoint creation/deletion time, so -that we can easily skip already used endpoint at local address -selection time. - -The endpoint used by the initial subflow is lazyly accounted at -subflow creation time: the usage bitmap is be up2date before -endpoint selection and we avoid such unneeded task in some relevant -scenarios - e.g. busy servers accepting incoming subflows but -not creating any additional ones nor annuncing additional addresses. - -Overall this allows for fair local endpoints usage in case of -subflow failure. - -As a side effect, this patch also enforces that each endpoint -is used at most once for each mptcp connection. - -Signed-off-by: Paolo Abeni -Signed-off-by: Mat Martineau -Signed-off-by: David S. Miller -Signed-off-by: Sasha Levin ---- - net/mptcp/pm.c | 1 + - net/mptcp/pm_netlink.c | 125 +++++++++++------- - net/mptcp/protocol.c | 3 +- - net/mptcp/protocol.h | 12 +- - .../testing/selftests/net/mptcp/mptcp_join.sh | 5 +- - 5 files changed, 91 insertions(+), 55 deletions(-) - -diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c -index 6ab386ff32944..332ac6eda3ba4 100644 ---- a/net/mptcp/pm.c -+++ b/net/mptcp/pm.c -@@ -370,6 +370,7 @@ void mptcp_pm_data_init(struct mptcp_sock *msk) - WRITE_ONCE(msk->pm.accept_subflow, false); - WRITE_ONCE(msk->pm.remote_deny_join_id0, false); - msk->pm.status = 0; -+ bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); - - spin_lock_init(&msk->pm.lock); - INIT_LIST_HEAD(&msk->pm.anno_list); -diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c -index 27427aeeee0e5..ad3dc9c6c5310 100644 ---- a/net/mptcp/pm_netlink.c -+++ b/net/mptcp/pm_netlink.c -@@ -38,10 +38,6 @@ struct mptcp_pm_add_entry { - u8 retrans_times; - }; - --/* max value of mptcp_addr_info.id */ --#define MAX_ADDR_ID U8_MAX --#define BITMAP_SZ DIV_ROUND_UP(MAX_ADDR_ID + 1, BITS_PER_LONG) -- - struct pm_nl_pernet { - /* protects pernet updates */ - spinlock_t lock; -@@ -53,14 +49,14 @@ struct pm_nl_pernet { - unsigned int local_addr_max; - unsigned int subflows_max; - unsigned int next_id; -- unsigned long id_bitmap[BITMAP_SZ]; -+ DECLARE_BITMAP(id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); - }; - - #define MPTCP_PM_ADDR_MAX 8 - #define ADD_ADDR_RETRANS_MAX 3 - - static bool addresses_equal(const struct mptcp_addr_info *a, -- struct mptcp_addr_info *b, bool use_port) -+ const struct mptcp_addr_info *b, bool use_port) - { - bool addr_equals = false; - -@@ -174,6 +170,9 @@ select_local_address(const struct pm_nl_pernet *pernet, - if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)) - continue; - -+ if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) -+ continue; -+ - if (entry->addr.family != sk->sk_family) { - #if IS_ENABLED(CONFIG_MPTCP_IPV6) - if ((entry->addr.family == AF_INET && -@@ -184,23 +183,17 @@ select_local_address(const struct pm_nl_pernet *pernet, - continue; - } - -- /* avoid any address already in use by subflows and -- * pending join -- */ -- if (!lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) { -- ret = entry; -- break; -- } -+ ret = entry; -+ break; - } - rcu_read_unlock(); - return ret; - } - - static struct mptcp_pm_addr_entry * --select_signal_address(struct pm_nl_pernet *pernet, unsigned int pos) -+select_signal_address(struct pm_nl_pernet *pernet, struct mptcp_sock *msk) - { - struct mptcp_pm_addr_entry *entry, *ret = NULL; -- int i = 0; - - rcu_read_lock(); - /* do not keep any additional per socket state, just signal -@@ -209,12 +202,14 @@ select_signal_address(struct pm_nl_pernet *pernet, unsigned int pos) - * can lead to additional addresses not being announced. - */ - list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) { -+ if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) -+ continue; -+ - if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) - continue; -- if (i++ == pos) { -- ret = entry; -- break; -- } -+ -+ ret = entry; -+ break; - } - rcu_read_unlock(); - return ret; -@@ -258,9 +253,11 @@ EXPORT_SYMBOL_GPL(mptcp_pm_get_local_addr_max); - - static void check_work_pending(struct mptcp_sock *msk) - { -- if (msk->pm.add_addr_signaled == mptcp_pm_get_add_addr_signal_max(msk) && -- (msk->pm.local_addr_used == mptcp_pm_get_local_addr_max(msk) || -- msk->pm.subflows == mptcp_pm_get_subflows_max(msk))) -+ struct pm_nl_pernet *pernet = net_generic(sock_net((struct sock *)msk), pm_nl_pernet_id); -+ -+ if (msk->pm.subflows == mptcp_pm_get_subflows_max(msk) || -+ (find_next_and_bit(pernet->id_bitmap, msk->pm.id_avail_bitmap, -+ MPTCP_PM_MAX_ADDR_ID + 1, 0) == MPTCP_PM_MAX_ADDR_ID + 1)) - WRITE_ONCE(msk->pm.work_pending, false); - } - -@@ -460,6 +457,35 @@ static unsigned int fill_remote_addresses_vec(struct mptcp_sock *msk, bool fullm - return i; - } - -+static struct mptcp_pm_addr_entry * -+__lookup_addr_by_id(struct pm_nl_pernet *pernet, unsigned int id) -+{ -+ struct mptcp_pm_addr_entry *entry; -+ -+ list_for_each_entry(entry, &pernet->local_addr_list, list) { -+ if (entry->addr.id == id) -+ return entry; -+ } -+ return NULL; -+} -+ -+static int -+lookup_id_by_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *addr) -+{ -+ struct mptcp_pm_addr_entry *entry; -+ int ret = -1; -+ -+ rcu_read_lock(); -+ list_for_each_entry(entry, &pernet->local_addr_list, list) { -+ if (addresses_equal(&entry->addr, addr, entry->addr.port)) { -+ ret = entry->addr.id; -+ break; -+ } -+ } -+ rcu_read_unlock(); -+ return ret; -+} -+ - static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) - { - struct sock *sk = (struct sock *)msk; -@@ -475,6 +501,19 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) - local_addr_max = mptcp_pm_get_local_addr_max(msk); - subflows_max = mptcp_pm_get_subflows_max(msk); - -+ /* do lazy endpoint usage accounting for the MPC subflows */ -+ if (unlikely(!(msk->pm.status & BIT(MPTCP_PM_MPC_ENDPOINT_ACCOUNTED))) && msk->first) { -+ struct mptcp_addr_info local; -+ int mpc_id; -+ -+ local_address((struct sock_common *)msk->first, &local); -+ mpc_id = lookup_id_by_addr(pernet, &local); -+ if (mpc_id < 0) -+ __clear_bit(mpc_id, msk->pm.id_avail_bitmap); -+ -+ msk->pm.status |= BIT(MPTCP_PM_MPC_ENDPOINT_ACCOUNTED); -+ } -+ - pr_debug("local %d:%d signal %d:%d subflows %d:%d\n", - msk->pm.local_addr_used, local_addr_max, - msk->pm.add_addr_signaled, add_addr_signal_max, -@@ -482,21 +521,16 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) - - /* check first for announce */ - if (msk->pm.add_addr_signaled < add_addr_signal_max) { -- local = select_signal_address(pernet, -- msk->pm.add_addr_signaled); -+ local = select_signal_address(pernet, msk); - - if (local) { - if (mptcp_pm_alloc_anno_list(msk, local)) { -+ __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); - msk->pm.add_addr_signaled++; - mptcp_pm_announce_addr(msk, &local->addr, false); - mptcp_pm_nl_addr_send_ack(msk); - } -- } else { -- /* pick failed, avoid fourther attempts later */ -- msk->pm.local_addr_used = add_addr_signal_max; - } -- -- check_work_pending(msk); - } - - /* check if should create a new subflow */ -@@ -510,19 +544,16 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) - int i, nr; - - msk->pm.local_addr_used++; -- check_work_pending(msk); - nr = fill_remote_addresses_vec(msk, fullmesh, addrs); -+ if (nr) -+ __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); - spin_unlock_bh(&msk->pm.lock); - for (i = 0; i < nr; i++) - __mptcp_subflow_connect(sk, &local->addr, &addrs[i]); - spin_lock_bh(&msk->pm.lock); -- return; - } -- -- /* lookup failed, avoid fourther attempts later */ -- msk->pm.local_addr_used = local_addr_max; -- check_work_pending(msk); - } -+ check_work_pending(msk); - } - - static void mptcp_pm_nl_fully_established(struct mptcp_sock *msk) -@@ -736,6 +767,7 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp_sock *msk, - msk->pm.subflows--; - __MPTCP_INC_STATS(sock_net(sk), rm_type); - } -+ __set_bit(rm_list->ids[1], msk->pm.id_avail_bitmap); - if (!removed) - continue; - -@@ -765,6 +797,9 @@ void mptcp_pm_nl_work(struct mptcp_sock *msk) - - msk_owned_by_me(msk); - -+ if (!(pm->status & MPTCP_PM_WORK_MASK)) -+ return; -+ - spin_lock_bh(&msk->pm.lock); - - pr_debug("msk=%p status=%x", msk, pm->status); -@@ -810,7 +845,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_nl_pernet *pernet, - /* to keep the code simple, don't do IDR-like allocation for address ID, - * just bail when we exceed limits - */ -- if (pernet->next_id == MAX_ADDR_ID) -+ if (pernet->next_id == MPTCP_PM_MAX_ADDR_ID) - pernet->next_id = 1; - if (pernet->addrs >= MPTCP_PM_ADDR_MAX) - goto out; -@@ -830,7 +865,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_nl_pernet *pernet, - if (!entry->addr.id) { - find_next: - entry->addr.id = find_next_zero_bit(pernet->id_bitmap, -- MAX_ADDR_ID + 1, -+ MPTCP_PM_MAX_ADDR_ID + 1, - pernet->next_id); - if (!entry->addr.id && pernet->next_id != 1) { - pernet->next_id = 1; -@@ -1197,18 +1232,6 @@ static int mptcp_nl_cmd_add_addr(struct sk_buff *skb, struct genl_info *info) - return 0; - } - --static struct mptcp_pm_addr_entry * --__lookup_addr_by_id(struct pm_nl_pernet *pernet, unsigned int id) --{ -- struct mptcp_pm_addr_entry *entry; -- -- list_for_each_entry(entry, &pernet->local_addr_list, list) { -- if (entry->addr.id == id) -- return entry; -- } -- return NULL; --} -- - int mptcp_pm_get_flags_and_ifindex_by_id(struct net *net, unsigned int id, - u8 *flags, int *ifindex) - { -@@ -1467,7 +1490,7 @@ static int mptcp_nl_cmd_flush_addrs(struct sk_buff *skb, struct genl_info *info) - list_splice_init(&pernet->local_addr_list, &free_list); - __reset_counters(pernet); - pernet->next_id = 1; -- bitmap_zero(pernet->id_bitmap, MAX_ADDR_ID + 1); -+ bitmap_zero(pernet->id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); - spin_unlock_bh(&pernet->lock); - mptcp_nl_remove_addrs_list(sock_net(skb->sk), &free_list); - synchronize_rcu(); -@@ -1577,7 +1600,7 @@ static int mptcp_nl_cmd_dump_addrs(struct sk_buff *msg, - pernet = net_generic(net, pm_nl_pernet_id); - - spin_lock_bh(&pernet->lock); -- for (i = id; i < MAX_ADDR_ID + 1; i++) { -+ for (i = id; i < MPTCP_PM_MAX_ADDR_ID + 1; i++) { - if (test_bit(i, pernet->id_bitmap)) { - entry = __lookup_addr_by_id(pernet, i); - if (!entry) -diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c -index 0cd55e4c30fab..70a3cac85f7b8 100644 ---- a/net/mptcp/protocol.c -+++ b/net/mptcp/protocol.c -@@ -2416,8 +2416,7 @@ static void mptcp_worker(struct work_struct *work) - - mptcp_check_fastclose(msk); - -- if (msk->pm.status) -- mptcp_pm_nl_work(msk); -+ mptcp_pm_nl_work(msk); - - if (test_and_clear_bit(MPTCP_WORK_EOF, &msk->flags)) - mptcp_check_for_eof(msk); -diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h -index d87cc040352e3..0387ad9fb43f7 100644 ---- a/net/mptcp/protocol.h -+++ b/net/mptcp/protocol.h -@@ -174,16 +174,25 @@ enum mptcp_pm_status { - MPTCP_PM_ADD_ADDR_SEND_ACK, - MPTCP_PM_RM_ADDR_RECEIVED, - MPTCP_PM_ESTABLISHED, -- MPTCP_PM_ALREADY_ESTABLISHED, /* persistent status, set after ESTABLISHED event */ - MPTCP_PM_SUBFLOW_ESTABLISHED, -+ MPTCP_PM_ALREADY_ESTABLISHED, /* persistent status, set after ESTABLISHED event */ -+ MPTCP_PM_MPC_ENDPOINT_ACCOUNTED /* persistent status, set after MPC local address is -+ * accounted int id_avail_bitmap -+ */ - }; - -+/* Status bits below MPTCP_PM_ALREADY_ESTABLISHED need pm worker actions */ -+#define MPTCP_PM_WORK_MASK ((1 << MPTCP_PM_ALREADY_ESTABLISHED) - 1) -+ - enum mptcp_addr_signal_status { - MPTCP_ADD_ADDR_SIGNAL, - MPTCP_ADD_ADDR_ECHO, - MPTCP_RM_ADDR_SIGNAL, - }; - -+/* max value of mptcp_addr_info.id */ -+#define MPTCP_PM_MAX_ADDR_ID U8_MAX -+ - struct mptcp_pm_data { - struct mptcp_addr_info local; - struct mptcp_addr_info remote; -@@ -202,6 +211,7 @@ struct mptcp_pm_data { - u8 local_addr_used; - u8 subflows; - u8 status; -+ DECLARE_BITMAP(id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); - struct mptcp_rm_list rm_list_tx; - struct mptcp_rm_list rm_list_rx; - }; -diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh -index 7ef639a9d4a6f..bbafa4cf54538 100755 ---- a/tools/testing/selftests/net/mptcp/mptcp_join.sh -+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh -@@ -1071,7 +1071,10 @@ signal_address_tests() - ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags signal - ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags signal - run_tests $ns1 $ns2 10.0.1.1 -- chk_add_nr 4 4 -+ -+ # the server will not signal the address terminating -+ # the MPC subflow -+ chk_add_nr 3 3 - } - - link_failure_tests() --- -2.34.1 - diff --git a/queue-5.16/selftests-mptcp-fix-ipv6-routing-setup.patch b/queue-5.16/selftests-mptcp-fix-ipv6-routing-setup.patch deleted file mode 100644 index 03c4eec9a3e..00000000000 --- a/queue-5.16/selftests-mptcp-fix-ipv6-routing-setup.patch +++ /dev/null @@ -1,60 +0,0 @@ -From be5a0fa22e841762f539152fe1d17ced03bf752b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 20 Jan 2022 16:35:29 -0800 -Subject: selftests: mptcp: fix ipv6 routing setup - -From: Paolo Abeni - -[ Upstream commit 9846921dba4936d92f7608315b5d1e0a8ec3a538 ] - -MPJ ipv6 selftests currently lack per link route to the server -net. Additionally, ipv6 subflows endpoints are created without any -interface specified. The end-result is that in ipv6 self-tests -subflows are created all on the same link, leading to expected delays -and sporadic self-tests failures. - -Fix the issue by adding the missing setup bits. - -Fixes: 523514ed0a99 ("selftests: mptcp: add ADD_ADDR IPv6 test cases") -Reported-and-tested-by: Geliang Tang -Signed-off-by: Paolo Abeni -Signed-off-by: Mat Martineau -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - tools/testing/selftests/net/mptcp/mptcp_join.sh | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh -index bbafa4cf54538..d188ea0a5fc50 100755 ---- a/tools/testing/selftests/net/mptcp/mptcp_join.sh -+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh -@@ -75,6 +75,7 @@ init() - - # let $ns2 reach any $ns1 address from any interface - ip -net "$ns2" route add default via 10.0.$i.1 dev ns2eth$i metric 10$i -+ ip -net "$ns2" route add default via dead:beef:$i::1 dev ns2eth$i metric 10$i - done - } - -@@ -1389,7 +1390,7 @@ ipv6_tests() - reset - ip netns exec $ns1 ./pm_nl_ctl limits 0 1 - ip netns exec $ns2 ./pm_nl_ctl limits 0 1 -- ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow -+ ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 dev ns2eth3 flags subflow - run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow - chk_join_nr "single subflow IPv6" 1 1 1 - -@@ -1424,7 +1425,7 @@ ipv6_tests() - ip netns exec $ns1 ./pm_nl_ctl limits 0 2 - ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal - ip netns exec $ns2 ./pm_nl_ctl limits 1 2 -- ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow -+ ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 dev ns2eth3 flags subflow - run_tests $ns1 $ns2 dead:beef:1::1 0 -1 -1 slow - chk_join_nr "remove subflow and signal IPv6" 2 2 2 - chk_add_nr 1 1 --- -2.34.1 -