* [MPTCP][PATCH mptcp-next 0/2] mptcp_for_each_* cleanups
@ 2021-04-06 10:03 Geliang Tang
2021-04-06 10:03 ` [MPTCP][PATCH mptcp-next 1/2] mptcp: add mptcp_for_each_msk helper Geliang Tang
0 siblings, 1 reply; 8+ messages in thread
From: Geliang Tang @ 2021-04-06 10:03 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Two small cleanups using the macro helpers mptcp_for_each_*.
Geliang Tang (2):
mptcp: add mptcp_for_each_msk helper
mptcp: use mptcp_for_each_subflow in mptcp_close
net/mptcp/pm_netlink.c | 39 +++++++++++++++++----------------------
net/mptcp/protocol.c | 2 +-
2 files changed, 18 insertions(+), 23 deletions(-)
--
2.30.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [MPTCP][PATCH mptcp-next 1/2] mptcp: add mptcp_for_each_msk helper
2021-04-06 10:03 [MPTCP][PATCH mptcp-next 0/2] mptcp_for_each_* cleanups Geliang Tang
@ 2021-04-06 10:03 ` Geliang Tang
2021-04-06 10:03 ` [MPTCP][PATCH mptcp-next 2/2] mptcp: use mptcp_for_each_subflow in mptcp_close Geliang Tang
2021-04-06 23:44 ` [MPTCP][PATCH mptcp-next 1/2] mptcp: add mptcp_for_each_msk helper Mat Martineau
0 siblings, 2 replies; 8+ messages in thread
From: Geliang Tang @ 2021-04-06 10:03 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch added a new macro helper mptcp_for_each_msk to traverse each
existing msk socket in the net namespace.
Signed-off-by: Geliang Tang <geliangtang@gmail.com>
---
net/mptcp/pm_netlink.c | 39 +++++++++++++++++----------------------
1 file changed, 17 insertions(+), 22 deletions(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 6ba040897738..b9044defd89b 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -58,6 +58,10 @@ struct pm_nl_pernet {
#define MPTCP_PM_ADDR_MAX 8
#define ADD_ADDR_RETRANS_MAX 3
+#define mptcp_for_each_msk(__net, __msk) \
+ long __slot = 0, __num = 0; \
+ while ((__msk = mptcp_token_iter_next(__net, &(__slot), &(__num))) != NULL)
+
static bool addresses_equal(const struct mptcp_addr_info *a,
struct mptcp_addr_info *b, bool use_port)
{
@@ -985,9 +989,8 @@ static struct pm_nl_pernet *genl_info_pm_nl(struct genl_info *info)
static int mptcp_nl_add_subflow_or_signal_addr(struct net *net)
{
struct mptcp_sock *msk;
- long s_slot = 0, s_num = 0;
- while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
+ mptcp_for_each_msk(net, msk) {
struct sock *sk = (struct sock *)msk;
if (!READ_ONCE(msk->fully_established))
@@ -1096,14 +1099,9 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
struct mptcp_addr_info *addr)
{
struct mptcp_sock *msk;
- long s_slot = 0, s_num = 0;
- struct mptcp_rm_list list = { .nr = 0 };
-
- pr_debug("remove_id=%d", addr->id);
- list.ids[list.nr++] = addr->id;
-
- while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
+ mptcp_for_each_msk(net, msk) {
+ struct mptcp_rm_list list = { .nr = 0 };
struct sock *sk = (struct sock *)msk;
bool remove_subflow;
@@ -1112,6 +1110,8 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
goto next;
}
+ list.ids[list.nr++] = addr->id;
+
lock_sock(sk);
remove_subflow = lookup_subflow_by_saddr(&msk->conn_list, addr);
mptcp_pm_remove_anno_addr(msk, addr, remove_subflow);
@@ -1162,13 +1162,10 @@ static void mptcp_pm_free_addr_entry(struct mptcp_pm_addr_entry *entry)
static int mptcp_nl_remove_id_zero_address(struct net *net,
struct mptcp_addr_info *addr)
{
- struct mptcp_rm_list list = { .nr = 0 };
- long s_slot = 0, s_num = 0;
struct mptcp_sock *msk;
- list.ids[list.nr++] = 0;
-
- while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
+ mptcp_for_each_msk(net, msk) {
+ struct mptcp_rm_list list = { .nr = 0 };
struct sock *sk = (struct sock *)msk;
struct mptcp_addr_info msk_local;
@@ -1179,6 +1176,8 @@ static int mptcp_nl_remove_id_zero_address(struct net *net,
if (!addresses_equal(&msk_local, addr, addr->port))
goto next;
+ list.ids[list.nr++] = 0;
+
lock_sock(sk);
spin_lock_bh(&msk->pm.lock);
mptcp_pm_remove_addr(msk, &list);
@@ -1271,13 +1270,9 @@ static void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk,
static void mptcp_nl_remove_addrs_list(struct net *net,
struct list_head *rm_list)
{
- long s_slot = 0, s_num = 0;
struct mptcp_sock *msk;
- if (list_empty(rm_list))
- return;
-
- while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
+ mptcp_for_each_msk(net, msk) {
struct sock *sk = (struct sock *)msk;
lock_sock(sk);
@@ -1320,7 +1315,8 @@ static int mptcp_nl_cmd_flush_addrs(struct sk_buff *skb, struct genl_info *info)
pernet->next_id = 1;
bitmap_zero(pernet->id_bitmap, MAX_ADDR_ID + 1);
spin_unlock_bh(&pernet->lock);
- mptcp_nl_remove_addrs_list(sock_net(skb->sk), &free_list);
+ if (!list_empty(&free_list))
+ mptcp_nl_remove_addrs_list(sock_net(skb->sk), &free_list);
__flush_addrs(&free_list);
return 0;
}
@@ -1535,11 +1531,10 @@ static int mptcp_nl_addr_backup(struct net *net,
struct mptcp_addr_info *addr,
u8 bkup)
{
- long s_slot = 0, s_num = 0;
struct mptcp_sock *msk;
int ret = -EINVAL;
- while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
+ mptcp_for_each_msk(net, msk) {
struct sock *sk = (struct sock *)msk;
if (list_empty(&msk->conn_list))
--
2.30.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [MPTCP][PATCH mptcp-next 2/2] mptcp: use mptcp_for_each_subflow in mptcp_close
2021-04-06 10:03 ` [MPTCP][PATCH mptcp-next 1/2] mptcp: add mptcp_for_each_msk helper Geliang Tang
@ 2021-04-06 10:03 ` Geliang Tang
2021-04-08 15:48 ` Geliang Tang
2021-04-08 21:14 ` Mat Martineau
2021-04-06 23:44 ` [MPTCP][PATCH mptcp-next 1/2] mptcp: add mptcp_for_each_msk helper Mat Martineau
1 sibling, 2 replies; 8+ messages in thread
From: Geliang Tang @ 2021-04-06 10:03 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch used the macro helper mptcp_for_each_subflow() instead of
list_for_each_entry() in mptcp_close.
Signed-off-by: Geliang Tang <geliangtang@gmail.com>
---
net/mptcp/protocol.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 2d895c3c8746..3b7d1df8d019 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -2581,7 +2581,7 @@ static void mptcp_close(struct sock *sk, long timeout)
cleanup:
/* orphan all the subflows */
inet_csk(sk)->icsk_mtup.probe_timestamp = tcp_jiffies32;
- list_for_each_entry(subflow, &mptcp_sk(sk)->conn_list, node) {
+ mptcp_for_each_subflow(mptcp_sk(sk), subflow) {
struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
bool slow = lock_sock_fast(ssk);
--
2.30.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [MPTCP][PATCH mptcp-next 1/2] mptcp: add mptcp_for_each_msk helper
2021-04-06 10:03 ` [MPTCP][PATCH mptcp-next 1/2] mptcp: add mptcp_for_each_msk helper Geliang Tang
2021-04-06 10:03 ` [MPTCP][PATCH mptcp-next 2/2] mptcp: use mptcp_for_each_subflow in mptcp_close Geliang Tang
@ 2021-04-06 23:44 ` Mat Martineau
2021-04-07 7:55 ` Geliang Tang
1 sibling, 1 reply; 8+ messages in thread
From: Mat Martineau @ 2021-04-06 23:44 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp
On Tue, 6 Apr 2021, Geliang Tang wrote:
> This patch added a new macro helper mptcp_for_each_msk to traverse each
> existing msk socket in the net namespace.
>
> Signed-off-by: Geliang Tang <geliangtang@gmail.com>
> ---
> net/mptcp/pm_netlink.c | 39 +++++++++++++++++----------------------
> 1 file changed, 17 insertions(+), 22 deletions(-)
>
> diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
> index 6ba040897738..b9044defd89b 100644
> --- a/net/mptcp/pm_netlink.c
> +++ b/net/mptcp/pm_netlink.c
> @@ -58,6 +58,10 @@ struct pm_nl_pernet {
> #define MPTCP_PM_ADDR_MAX 8
> #define ADD_ADDR_RETRANS_MAX 3
>
> +#define mptcp_for_each_msk(__net, __msk) \
> + long __slot = 0, __num = 0; \
> + while ((__msk = mptcp_token_iter_next(__net, &(__slot), &(__num))) != NULL)
Hi Geliang,
I don't think it's good to move the variable declarations inside the macro
like this. It looks like the compiler or sparse might have complained when
the macro was used after a non-declaration line of code, since some other
code (like list.ids[] initialization) was moved around. The macro
shouldn't depend on careful placement in a code block this way - in my
view, it's better to live with the existing syntax.
Mat
> +
> static bool addresses_equal(const struct mptcp_addr_info *a,
> struct mptcp_addr_info *b, bool use_port)
> {
> @@ -985,9 +989,8 @@ static struct pm_nl_pernet *genl_info_pm_nl(struct genl_info *info)
> static int mptcp_nl_add_subflow_or_signal_addr(struct net *net)
> {
> struct mptcp_sock *msk;
> - long s_slot = 0, s_num = 0;
>
> - while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
> + mptcp_for_each_msk(net, msk) {
> struct sock *sk = (struct sock *)msk;
>
> if (!READ_ONCE(msk->fully_established))
> @@ -1096,14 +1099,9 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
> struct mptcp_addr_info *addr)
> {
> struct mptcp_sock *msk;
> - long s_slot = 0, s_num = 0;
> - struct mptcp_rm_list list = { .nr = 0 };
> -
> - pr_debug("remove_id=%d", addr->id);
>
> - list.ids[list.nr++] = addr->id;
> -
> - while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
> + mptcp_for_each_msk(net, msk) {
> + struct mptcp_rm_list list = { .nr = 0 };
> struct sock *sk = (struct sock *)msk;
> bool remove_subflow;
>
> @@ -1112,6 +1110,8 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
> goto next;
> }
>
> + list.ids[list.nr++] = addr->id;
> +
> lock_sock(sk);
> remove_subflow = lookup_subflow_by_saddr(&msk->conn_list, addr);
> mptcp_pm_remove_anno_addr(msk, addr, remove_subflow);
> @@ -1162,13 +1162,10 @@ static void mptcp_pm_free_addr_entry(struct mptcp_pm_addr_entry *entry)
> static int mptcp_nl_remove_id_zero_address(struct net *net,
> struct mptcp_addr_info *addr)
> {
> - struct mptcp_rm_list list = { .nr = 0 };
> - long s_slot = 0, s_num = 0;
> struct mptcp_sock *msk;
>
> - list.ids[list.nr++] = 0;
> -
> - while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
> + mptcp_for_each_msk(net, msk) {
> + struct mptcp_rm_list list = { .nr = 0 };
> struct sock *sk = (struct sock *)msk;
> struct mptcp_addr_info msk_local;
>
> @@ -1179,6 +1176,8 @@ static int mptcp_nl_remove_id_zero_address(struct net *net,
> if (!addresses_equal(&msk_local, addr, addr->port))
> goto next;
>
> + list.ids[list.nr++] = 0;
> +
> lock_sock(sk);
> spin_lock_bh(&msk->pm.lock);
> mptcp_pm_remove_addr(msk, &list);
> @@ -1271,13 +1270,9 @@ static void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk,
> static void mptcp_nl_remove_addrs_list(struct net *net,
> struct list_head *rm_list)
> {
> - long s_slot = 0, s_num = 0;
> struct mptcp_sock *msk;
>
> - if (list_empty(rm_list))
> - return;
> -
> - while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
> + mptcp_for_each_msk(net, msk) {
> struct sock *sk = (struct sock *)msk;
>
> lock_sock(sk);
> @@ -1320,7 +1315,8 @@ static int mptcp_nl_cmd_flush_addrs(struct sk_buff *skb, struct genl_info *info)
> pernet->next_id = 1;
> bitmap_zero(pernet->id_bitmap, MAX_ADDR_ID + 1);
> spin_unlock_bh(&pernet->lock);
> - mptcp_nl_remove_addrs_list(sock_net(skb->sk), &free_list);
> + if (!list_empty(&free_list))
> + mptcp_nl_remove_addrs_list(sock_net(skb->sk), &free_list);
> __flush_addrs(&free_list);
> return 0;
> }
> @@ -1535,11 +1531,10 @@ static int mptcp_nl_addr_backup(struct net *net,
> struct mptcp_addr_info *addr,
> u8 bkup)
> {
> - long s_slot = 0, s_num = 0;
> struct mptcp_sock *msk;
> int ret = -EINVAL;
>
> - while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
> + mptcp_for_each_msk(net, msk) {
> struct sock *sk = (struct sock *)msk;
>
> if (list_empty(&msk->conn_list))
> --
> 2.30.2
>
>
>
--
Mat Martineau
Intel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [MPTCP][PATCH mptcp-next 1/2] mptcp: add mptcp_for_each_msk helper
2021-04-06 23:44 ` [MPTCP][PATCH mptcp-next 1/2] mptcp: add mptcp_for_each_msk helper Mat Martineau
@ 2021-04-07 7:55 ` Geliang Tang
0 siblings, 0 replies; 8+ messages in thread
From: Geliang Tang @ 2021-04-07 7:55 UTC (permalink / raw)
To: Mat Martineau; +Cc: mptcp
Mat Martineau <mathew.j.martineau@linux.intel.com> 于2021年4月7日周三 上午7:44写道:
>
>
> On Tue, 6 Apr 2021, Geliang Tang wrote:
>
> > This patch added a new macro helper mptcp_for_each_msk to traverse each
> > existing msk socket in the net namespace.
> >
> > Signed-off-by: Geliang Tang <geliangtang@gmail.com>
> > ---
> > net/mptcp/pm_netlink.c | 39 +++++++++++++++++----------------------
> > 1 file changed, 17 insertions(+), 22 deletions(-)
> >
> > diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
> > index 6ba040897738..b9044defd89b 100644
> > --- a/net/mptcp/pm_netlink.c
> > +++ b/net/mptcp/pm_netlink.c
> > @@ -58,6 +58,10 @@ struct pm_nl_pernet {
> > #define MPTCP_PM_ADDR_MAX 8
> > #define ADD_ADDR_RETRANS_MAX 3
> >
> > +#define mptcp_for_each_msk(__net, __msk) \
> > + long __slot = 0, __num = 0; \
> > + while ((__msk = mptcp_token_iter_next(__net, &(__slot), &(__num))) != NULL)
>
> Hi Geliang,
>
> I don't think it's good to move the variable declarations inside the macro
> like this. It looks like the compiler or sparse might have complained when
> the macro was used after a non-declaration line of code, since some other
> code (like list.ids[] initialization) was moved around. The macro
> shouldn't depend on careful placement in a code block this way - in my
> view, it's better to live with the existing syntax.
I agree with you, thanks Mat.
-Geliang
>
>
> Mat
>
>
> > +
> > static bool addresses_equal(const struct mptcp_addr_info *a,
> > struct mptcp_addr_info *b, bool use_port)
> > {
> > @@ -985,9 +989,8 @@ static struct pm_nl_pernet *genl_info_pm_nl(struct genl_info *info)
> > static int mptcp_nl_add_subflow_or_signal_addr(struct net *net)
> > {
> > struct mptcp_sock *msk;
> > - long s_slot = 0, s_num = 0;
> >
> > - while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
> > + mptcp_for_each_msk(net, msk) {
> > struct sock *sk = (struct sock *)msk;
> >
> > if (!READ_ONCE(msk->fully_established))
> > @@ -1096,14 +1099,9 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
> > struct mptcp_addr_info *addr)
> > {
> > struct mptcp_sock *msk;
> > - long s_slot = 0, s_num = 0;
> > - struct mptcp_rm_list list = { .nr = 0 };
> > -
> > - pr_debug("remove_id=%d", addr->id);
> >
> > - list.ids[list.nr++] = addr->id;
> > -
> > - while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
> > + mptcp_for_each_msk(net, msk) {
> > + struct mptcp_rm_list list = { .nr = 0 };
> > struct sock *sk = (struct sock *)msk;
> > bool remove_subflow;
> >
> > @@ -1112,6 +1110,8 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
> > goto next;
> > }
> >
> > + list.ids[list.nr++] = addr->id;
> > +
> > lock_sock(sk);
> > remove_subflow = lookup_subflow_by_saddr(&msk->conn_list, addr);
> > mptcp_pm_remove_anno_addr(msk, addr, remove_subflow);
> > @@ -1162,13 +1162,10 @@ static void mptcp_pm_free_addr_entry(struct mptcp_pm_addr_entry *entry)
> > static int mptcp_nl_remove_id_zero_address(struct net *net,
> > struct mptcp_addr_info *addr)
> > {
> > - struct mptcp_rm_list list = { .nr = 0 };
> > - long s_slot = 0, s_num = 0;
> > struct mptcp_sock *msk;
> >
> > - list.ids[list.nr++] = 0;
> > -
> > - while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
> > + mptcp_for_each_msk(net, msk) {
> > + struct mptcp_rm_list list = { .nr = 0 };
> > struct sock *sk = (struct sock *)msk;
> > struct mptcp_addr_info msk_local;
> >
> > @@ -1179,6 +1176,8 @@ static int mptcp_nl_remove_id_zero_address(struct net *net,
> > if (!addresses_equal(&msk_local, addr, addr->port))
> > goto next;
> >
> > + list.ids[list.nr++] = 0;
> > +
> > lock_sock(sk);
> > spin_lock_bh(&msk->pm.lock);
> > mptcp_pm_remove_addr(msk, &list);
> > @@ -1271,13 +1270,9 @@ static void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk,
> > static void mptcp_nl_remove_addrs_list(struct net *net,
> > struct list_head *rm_list)
> > {
> > - long s_slot = 0, s_num = 0;
> > struct mptcp_sock *msk;
> >
> > - if (list_empty(rm_list))
> > - return;
> > -
> > - while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
> > + mptcp_for_each_msk(net, msk) {
> > struct sock *sk = (struct sock *)msk;
> >
> > lock_sock(sk);
> > @@ -1320,7 +1315,8 @@ static int mptcp_nl_cmd_flush_addrs(struct sk_buff *skb, struct genl_info *info)
> > pernet->next_id = 1;
> > bitmap_zero(pernet->id_bitmap, MAX_ADDR_ID + 1);
> > spin_unlock_bh(&pernet->lock);
> > - mptcp_nl_remove_addrs_list(sock_net(skb->sk), &free_list);
> > + if (!list_empty(&free_list))
> > + mptcp_nl_remove_addrs_list(sock_net(skb->sk), &free_list);
> > __flush_addrs(&free_list);
> > return 0;
> > }
> > @@ -1535,11 +1531,10 @@ static int mptcp_nl_addr_backup(struct net *net,
> > struct mptcp_addr_info *addr,
> > u8 bkup)
> > {
> > - long s_slot = 0, s_num = 0;
> > struct mptcp_sock *msk;
> > int ret = -EINVAL;
> >
> > - while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
> > + mptcp_for_each_msk(net, msk) {
> > struct sock *sk = (struct sock *)msk;
> >
> > if (list_empty(&msk->conn_list))
> > --
> > 2.30.2
> >
> >
> >
>
> --
> Mat Martineau
> Intel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [MPTCP][PATCH mptcp-next 2/2] mptcp: use mptcp_for_each_subflow in mptcp_close
2021-04-06 10:03 ` [MPTCP][PATCH mptcp-next 2/2] mptcp: use mptcp_for_each_subflow in mptcp_close Geliang Tang
@ 2021-04-08 15:48 ` Geliang Tang
2021-04-08 21:14 ` Mat Martineau
1 sibling, 0 replies; 8+ messages in thread
From: Geliang Tang @ 2021-04-08 15:48 UTC (permalink / raw)
To: mptcp
Hi Mat,
I think this cleanup patch is still valid, isn't it?
Thanks.
-Geliang
Geliang Tang <geliangtang@gmail.com> 于2021年4月6日周二 下午6:03写道:
>
> This patch used the macro helper mptcp_for_each_subflow() instead of
> list_for_each_entry() in mptcp_close.
>
> Signed-off-by: Geliang Tang <geliangtang@gmail.com>
> ---
> net/mptcp/protocol.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> index 2d895c3c8746..3b7d1df8d019 100644
> --- a/net/mptcp/protocol.c
> +++ b/net/mptcp/protocol.c
> @@ -2581,7 +2581,7 @@ static void mptcp_close(struct sock *sk, long timeout)
> cleanup:
> /* orphan all the subflows */
> inet_csk(sk)->icsk_mtup.probe_timestamp = tcp_jiffies32;
> - list_for_each_entry(subflow, &mptcp_sk(sk)->conn_list, node) {
> + mptcp_for_each_subflow(mptcp_sk(sk), subflow) {
> struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
> bool slow = lock_sock_fast(ssk);
>
> --
> 2.30.2
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [MPTCP][PATCH mptcp-next 2/2] mptcp: use mptcp_for_each_subflow in mptcp_close
2021-04-06 10:03 ` [MPTCP][PATCH mptcp-next 2/2] mptcp: use mptcp_for_each_subflow in mptcp_close Geliang Tang
2021-04-08 15:48 ` Geliang Tang
@ 2021-04-08 21:14 ` Mat Martineau
2021-04-14 13:52 ` Matthieu Baerts
1 sibling, 1 reply; 8+ messages in thread
From: Mat Martineau @ 2021-04-08 21:14 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp
On Tue, 6 Apr 2021, Geliang Tang wrote:
> This patch used the macro helper mptcp_for_each_subflow() instead of
> list_for_each_entry() in mptcp_close.
>
> Signed-off-by: Geliang Tang <geliangtang@gmail.com>
> ---
> net/mptcp/protocol.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
Thanks for the reminder Geliang. Yes, this patch is good!
Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
> diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> index 2d895c3c8746..3b7d1df8d019 100644
> --- a/net/mptcp/protocol.c
> +++ b/net/mptcp/protocol.c
> @@ -2581,7 +2581,7 @@ static void mptcp_close(struct sock *sk, long timeout)
> cleanup:
> /* orphan all the subflows */
> inet_csk(sk)->icsk_mtup.probe_timestamp = tcp_jiffies32;
> - list_for_each_entry(subflow, &mptcp_sk(sk)->conn_list, node) {
> + mptcp_for_each_subflow(mptcp_sk(sk), subflow) {
> struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
> bool slow = lock_sock_fast(ssk);
>
> --
> 2.30.2
--
Mat Martineau
Intel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [MPTCP][PATCH mptcp-next 2/2] mptcp: use mptcp_for_each_subflow in mptcp_close
2021-04-08 21:14 ` Mat Martineau
@ 2021-04-14 13:52 ` Matthieu Baerts
0 siblings, 0 replies; 8+ messages in thread
From: Matthieu Baerts @ 2021-04-14 13:52 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang; +Cc: mptcp
Hi Geliang, Mat,
On 08/04/2021 23:14, Mat Martineau wrote:
> On Tue, 6 Apr 2021, Geliang Tang wrote:
>
>> This patch used the macro helper mptcp_for_each_subflow() instead of
>> list_for_each_entry() in mptcp_close.
>>
>> Signed-off-by: Geliang Tang <geliangtang@gmail.com>
>> ---
>> net/mptcp/protocol.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>
> Thanks for the reminder Geliang. Yes, this patch is good!
Thank you for the patch and the review!
Just applied in our tree:
- 2f4679e077b6: mptcp: use mptcp_for_each_subflow in mptcp_close
- Results: 04d87efa6919..f90b3d445732
Cheers,
Matt
--
Tessares | Belgium | Hybrid Access Solutions
www.tessares.net
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-04-14 13:52 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-06 10:03 [MPTCP][PATCH mptcp-next 0/2] mptcp_for_each_* cleanups Geliang Tang
2021-04-06 10:03 ` [MPTCP][PATCH mptcp-next 1/2] mptcp: add mptcp_for_each_msk helper Geliang Tang
2021-04-06 10:03 ` [MPTCP][PATCH mptcp-next 2/2] mptcp: use mptcp_for_each_subflow in mptcp_close Geliang Tang
2021-04-08 15:48 ` Geliang Tang
2021-04-08 21:14 ` Mat Martineau
2021-04-14 13:52 ` Matthieu Baerts
2021-04-06 23:44 ` [MPTCP][PATCH mptcp-next 1/2] mptcp: add mptcp_for_each_msk helper Mat Martineau
2021-04-07 7:55 ` Geliang Tang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).