@@ -698,7 +698,7 @@ static bool mptcp_established_options_rm_addr(struct sock *sk,
!(mptcp_pm_rm_addr_signal(msk, remaining, &rm_list)))
return false;
- len = mptcp_rm_addr_len(rm_list);
+ len = mptcp_rm_addr_len(&rm_list);
if (len < 0)
return false;
if (remaining < len)
@@ -1076,7 +1076,7 @@ void mptcp_incoming_options(struct sock *sk, struct sk_buff *skb)
}
if (mp_opt.rm_addr) {
- mptcp_pm_rm_addr_received(msk, mp_opt.rm_list);
+ mptcp_pm_rm_addr_received(msk, &mp_opt.rm_list);
mp_opt.rm_addr = 0;
}
@@ -39,26 +39,26 @@ int mptcp_pm_announce_addr(struct mptcp_sock *msk,
return 0;
}
-int mptcp_pm_remove_addr(struct mptcp_sock *msk, struct mptcp_rm_list rm_list)
+int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list)
{
u8 rm_addr = READ_ONCE(msk->pm.addr_signal);
- pr_debug("msk=%p, rm_list_nr=%d", msk, rm_list.nr);
+ pr_debug("msk=%p, rm_list_nr=%d", msk, rm_list->nr);
if (rm_addr) {
pr_warn("addr_signal error, rm_addr=%d", rm_addr);
return -EINVAL;
}
- msk->pm.rm_list_tx = rm_list;
+ msk->pm.rm_list_tx = *rm_list;
rm_addr |= BIT(MPTCP_RM_ADDR_SIGNAL);
WRITE_ONCE(msk->pm.addr_signal, rm_addr);
return 0;
}
-int mptcp_pm_remove_subflow(struct mptcp_sock *msk, struct mptcp_rm_list rm_list)
+int mptcp_pm_remove_subflow(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list)
{
- pr_debug("msk=%p, rm_list_nr=%d", msk, rm_list.nr);
+ pr_debug("msk=%p, rm_list_nr=%d", msk, rm_list->nr);
spin_lock_bh(&msk->pm.lock);
mptcp_pm_nl_rm_subflow_received(msk, rm_list);
@@ -219,19 +219,20 @@ void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk)
mptcp_pm_schedule_work(msk, MPTCP_PM_ADD_ADDR_SEND_ACK);
}
-void mptcp_pm_rm_addr_received(struct mptcp_sock *msk, struct mptcp_rm_list rm_list)
+void mptcp_pm_rm_addr_received(struct mptcp_sock *msk,
+ const struct mptcp_rm_list *rm_list)
{
struct mptcp_pm_data *pm = &msk->pm;
u8 i;
- pr_debug("msk=%p remote_ids_nr=%d", msk, rm_list.nr);
+ pr_debug("msk=%p remote_ids_nr=%d", msk, rm_list->nr);
- for (i = 0; i < rm_list.nr; i++)
- mptcp_event_addr_removed(msk, rm_list.ids[i]);
+ for (i = 0; i < rm_list->nr; i++)
+ mptcp_event_addr_removed(msk, rm_list->ids[i]);
spin_lock_bh(&pm->lock);
mptcp_pm_schedule_work(msk, MPTCP_PM_RM_ADDR_RECEIVED);
- pm->rm_list_rx = rm_list;
+ pm->rm_list_rx = *rm_list;
spin_unlock_bh(&pm->lock);
}
@@ -284,7 +285,7 @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
if (!mptcp_pm_should_rm_signal(msk))
goto out_unlock;
- len = mptcp_rm_addr_len(msk->pm.rm_list_tx);
+ len = mptcp_rm_addr_len(&msk->pm.rm_list_tx);
if (len < 0) {
WRITE_ONCE(msk->pm.addr_signal, 0);
goto out_unlock;
@@ -668,31 +668,32 @@ void mptcp_pm_nl_work(struct mptcp_sock *msk)
spin_unlock_bh(&msk->pm.lock);
}
-void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk, struct mptcp_rm_list rm_list)
+void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk,
+ const struct mptcp_rm_list *rm_list)
{
struct mptcp_subflow_context *subflow, *tmp;
struct sock *sk = (struct sock *)msk;
u8 i;
- pr_debug("subflow rm_list_nr %d", rm_list.nr);
+ pr_debug("subflow rm_list_nr %d", rm_list->nr);
msk_owned_by_me(msk);
- if (!rm_list.nr)
+ if (!rm_list->nr)
return;
if (list_empty(&msk->conn_list))
return;
- for (i = 0; i < rm_list.nr; i++) {
+ for (i = 0; i < rm_list->nr; i++) {
list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) {
struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
int how = RCV_SHUTDOWN | SEND_SHUTDOWN;
- if (rm_list.ids[i] != subflow->local_id)
+ if (rm_list->ids[i] != subflow->local_id)
continue;
- pr_debug(" -> subflow rm_list_ids[%d]=%u", i, rm_list.ids[i]);
+ pr_debug(" -> subflow rm_list_ids[%d]=%u", i, rm_list->ids[i]);
spin_unlock_bh(&msk->pm.lock);
mptcp_subflow_shutdown(sk, ssk, how);
mptcp_close_ssk(sk, ssk, subflow);
@@ -1110,7 +1111,7 @@ static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
ret = remove_anno_list_by_saddr(msk, addr);
if (ret || force) {
spin_lock_bh(&msk->pm.lock);
- mptcp_pm_remove_addr(msk, list);
+ mptcp_pm_remove_addr(msk, &list);
spin_unlock_bh(&msk->pm.lock);
}
return ret;
@@ -1140,7 +1141,7 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
remove_subflow = lookup_subflow_by_saddr(&msk->conn_list, addr);
mptcp_pm_remove_anno_addr(msk, addr, remove_subflow);
if (remove_subflow)
- mptcp_pm_remove_subflow(msk, list);
+ mptcp_pm_remove_subflow(msk, &list);
release_sock(sk);
next:
@@ -1242,11 +1243,11 @@ static void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk,
if (alist.nr) {
spin_lock_bh(&msk->pm.lock);
- mptcp_pm_remove_addr(msk, alist);
+ mptcp_pm_remove_addr(msk, &alist);
spin_unlock_bh(&msk->pm.lock);
}
if (slist.nr)
- mptcp_pm_remove_subflow(msk, slist);
+ mptcp_pm_remove_subflow(msk, &slist);
}
static void mptcp_nl_remove_addrs_list(struct net *net,
@@ -661,7 +661,8 @@ void mptcp_pm_add_addr_received(struct mptcp_sock *msk,
void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk,
struct mptcp_addr_info *addr);
void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk);
-void mptcp_pm_rm_addr_received(struct mptcp_sock *msk, struct mptcp_rm_list rm_list);
+void mptcp_pm_rm_addr_received(struct mptcp_sock *msk,
+ const struct mptcp_rm_list *rm_list);
void mptcp_pm_mp_prio_received(struct sock *sk, u8 bkup);
int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk,
struct mptcp_addr_info *addr,
@@ -678,8 +679,8 @@ mptcp_lookup_anno_list_by_saddr(struct mptcp_sock *msk,
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
const struct mptcp_addr_info *addr,
bool echo);
-int mptcp_pm_remove_addr(struct mptcp_sock *msk, struct mptcp_rm_list rm_list);
-int mptcp_pm_remove_subflow(struct mptcp_sock *msk, struct mptcp_rm_list rm_list);
+int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list);
+int mptcp_pm_remove_subflow(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list);
void mptcp_event(enum mptcp_event_type type, const struct mptcp_sock *msk,
const struct sock *ssk, gfp_t gfp);
@@ -725,12 +726,12 @@ static inline unsigned int mptcp_add_addr_len(int family, bool echo, bool port)
return len;
}
-static inline int mptcp_rm_addr_len(struct mptcp_rm_list rm_list)
+static inline int mptcp_rm_addr_len(const struct mptcp_rm_list *rm_list)
{
- if (rm_list.nr == 0 || rm_list.nr >= MPTCP_RM_IDS_MAX)
+ if (rm_list->nr == 0 || rm_list->nr >= MPTCP_RM_IDS_MAX)
return -EINVAL;
- return TCPOLEN_MPTCP_RM_ADDR_BASE + roundup(rm_list.nr - 1, 4) + 1;
+ return TCPOLEN_MPTCP_RM_ADDR_BASE + roundup(rm_list->nr - 1, 4) + 1;
}
bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
@@ -742,7 +743,8 @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
void __init mptcp_pm_nl_init(void);
void mptcp_pm_nl_data_init(struct mptcp_sock *msk);
void mptcp_pm_nl_work(struct mptcp_sock *msk);
-void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk, struct mptcp_rm_list rm_list);
+void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk,
+ const struct mptcp_rm_list *rm_list);
int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
unsigned int mptcp_pm_get_add_addr_signal_max(struct mptcp_sock *msk);
unsigned int mptcp_pm_get_add_addr_accept_max(struct mptcp_sock *msk);
This patch changed the type of argument rm_list from "struct mptcp_rm_list rm_list" to "const struct mptcp_rm_list *rm_list". Suggested-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Geliang Tang <geliangtang@gmail.com> --- net/mptcp/options.c | 4 ++-- net/mptcp/pm.c | 23 ++++++++++++----------- net/mptcp/pm_netlink.c | 21 +++++++++++---------- net/mptcp/protocol.h | 16 +++++++++------- 4 files changed, 34 insertions(+), 30 deletions(-)