Skip to content

Commit 918226a

Browse files
Geliang Tangintel-lab-lkp
authored andcommitted
mptcp: move mptcp_pm_remove_addrs into pm_userspace
Since mptcp_pm_remove_addrs is only called from the userspace PM, this patch moves it into pm_userspace.c. For this, lookup_subflow_by_saddr() and remove_anno_list_by_saddr() helpers need to be exported in protocol.h. Also add "mptcp_" prefix for these helpers. This patch doesn't change the behaviour of the code, just refactoring. Signed-off-by: Geliang Tang <[email protected]>
1 parent e5ad6ed commit 918226a

File tree

3 files changed

+40
-37
lines changed

3 files changed

+40
-37
lines changed

net/mptcp/pm_netlink.c

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ static void remote_address(const struct sock_common *skc,
107107
#endif
108108
}
109109

110-
static bool lookup_subflow_by_saddr(const struct list_head *list,
111-
const struct mptcp_addr_info *saddr)
110+
bool mptcp_lookup_subflow_by_saddr(const struct list_head *list,
111+
const struct mptcp_addr_info *saddr)
112112
{
113113
struct mptcp_subflow_context *subflow;
114114
struct mptcp_addr_info cur;
@@ -1453,8 +1453,8 @@ int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, struct genl_info *info)
14531453
return ret;
14541454
}
14551455

1456-
static bool remove_anno_list_by_saddr(struct mptcp_sock *msk,
1457-
const struct mptcp_addr_info *addr)
1456+
bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk,
1457+
const struct mptcp_addr_info *addr)
14581458
{
14591459
struct mptcp_pm_add_entry *entry;
14601460

@@ -1482,7 +1482,7 @@ static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
14821482

14831483
list.ids[list.nr++] = mptcp_endp_get_local_id(msk, addr);
14841484

1485-
ret = remove_anno_list_by_saddr(msk, addr);
1485+
ret = mptcp_remove_anno_list_by_saddr(msk, addr);
14861486
if (ret || force) {
14871487
spin_lock_bh(&msk->pm.lock);
14881488
if (ret) {
@@ -1526,7 +1526,7 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
15261526
}
15271527

15281528
lock_sock(sk);
1529-
remove_subflow = lookup_subflow_by_saddr(&msk->conn_list, addr);
1529+
remove_subflow = mptcp_lookup_subflow_by_saddr(&msk->conn_list, addr);
15301530
mptcp_pm_remove_anno_addr(msk, addr, remove_subflow &&
15311531
!(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT));
15321532

@@ -1639,35 +1639,6 @@ int mptcp_pm_nl_del_addr_doit(struct sk_buff *skb, struct genl_info *info)
16391639
return ret;
16401640
}
16411641

1642-
/* Called from the userspace PM only */
1643-
void mptcp_pm_remove_addrs(struct mptcp_sock *msk, struct list_head *rm_list)
1644-
{
1645-
struct mptcp_rm_list alist = { .nr = 0 };
1646-
struct mptcp_pm_addr_entry *entry;
1647-
int anno_nr = 0;
1648-
1649-
list_for_each_entry(entry, rm_list, list) {
1650-
if (alist.nr >= MPTCP_RM_IDS_MAX)
1651-
break;
1652-
1653-
/* only delete if either announced or matching a subflow */
1654-
if (remove_anno_list_by_saddr(msk, &entry->addr))
1655-
anno_nr++;
1656-
else if (!lookup_subflow_by_saddr(&msk->conn_list,
1657-
&entry->addr))
1658-
continue;
1659-
1660-
alist.ids[alist.nr++] = entry->addr.id;
1661-
}
1662-
1663-
if (alist.nr) {
1664-
spin_lock_bh(&msk->pm.lock);
1665-
msk->pm.add_addr_signaled -= anno_nr;
1666-
mptcp_pm_remove_addr(msk, &alist);
1667-
spin_unlock_bh(&msk->pm.lock);
1668-
}
1669-
}
1670-
16711642
/* Called from the in-kernel PM only */
16721643
static void mptcp_pm_flush_addrs_and_subflows(struct mptcp_sock *msk,
16731644
struct list_head *rm_list)
@@ -1677,11 +1648,11 @@ static void mptcp_pm_flush_addrs_and_subflows(struct mptcp_sock *msk,
16771648

16781649
list_for_each_entry(entry, rm_list, list) {
16791650
if (slist.nr < MPTCP_RM_IDS_MAX &&
1680-
lookup_subflow_by_saddr(&msk->conn_list, &entry->addr))
1651+
mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr))
16811652
slist.ids[slist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr);
16821653

16831654
if (alist.nr < MPTCP_RM_IDS_MAX &&
1684-
remove_anno_list_by_saddr(msk, &entry->addr))
1655+
mptcp_remove_anno_list_by_saddr(msk, &entry->addr))
16851656
alist.ids[alist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr);
16861657
}
16871658

net/mptcp/pm_userspace.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,34 @@ static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk,
286286
return err;
287287
}
288288

289+
void mptcp_pm_remove_addrs(struct mptcp_sock *msk, struct list_head *rm_list)
290+
{
291+
struct mptcp_rm_list alist = { .nr = 0 };
292+
struct mptcp_pm_addr_entry *entry;
293+
int anno_nr = 0;
294+
295+
list_for_each_entry(entry, rm_list, list) {
296+
if (alist.nr >= MPTCP_RM_IDS_MAX)
297+
break;
298+
299+
/* only delete if either announced or matching a subflow */
300+
if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr))
301+
anno_nr++;
302+
else if (!mptcp_lookup_subflow_by_saddr(&msk->conn_list,
303+
&entry->addr))
304+
continue;
305+
306+
alist.ids[alist.nr++] = entry->addr.id;
307+
}
308+
309+
if (alist.nr) {
310+
spin_lock_bh(&msk->pm.lock);
311+
msk->pm.add_addr_signaled -= anno_nr;
312+
mptcp_pm_remove_addr(msk, &alist);
313+
spin_unlock_bh(&msk->pm.lock);
314+
}
315+
}
316+
289317
int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
290318
{
291319
struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID];

net/mptcp/protocol.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,6 +1031,10 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk,
10311031
struct mptcp_pm_add_entry *
10321032
mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
10331033
const struct mptcp_addr_info *addr);
1034+
bool mptcp_lookup_subflow_by_saddr(const struct list_head *list,
1035+
const struct mptcp_addr_info *saddr);
1036+
bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk,
1037+
const struct mptcp_addr_info *addr);
10341038
int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info);
10351039
int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info);
10361040
int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info);

0 commit comments

Comments
 (0)