* Re: [MPTCP] [RFC PATCH v3 10/16] mptcp: Add shutdown() socket operation
@ 2018-10-10 12:43 Matthieu Baerts
0 siblings, 0 replies; 4+ messages in thread
From: Matthieu Baerts @ 2018-10-10 12:43 UTC (permalink / raw)
To: mptcp
[-- Attachment #1: Type: text/plain, Size: 2051 bytes --]
Hi Peter,
On 06/10/2018 00:59, Mat Martineau wrote:
> From: Peter Krystad <peter.krystad(a)intel.com>
>
> Signed-off-by: Peter Krystad <peter.krystad(a)intel.com>
> ---
> net/mptcp/protocol.c | 21 ++++++++++++++++++++-
> 1 file changed, 20 insertions(+), 1 deletion(-)
>
> diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> index 2fa9031a77ca..3d10ab287bd6 100644
> --- a/net/mptcp/protocol.c
> +++ b/net/mptcp/protocol.c
> @@ -255,6 +255,25 @@ int mptcp_stream_accept(struct socket *sock, struct socket *newsock, int flags,
> return inet_accept(sock, newsock, flags, kern);
> }
>
> +int mptcp_stream_shutdown(struct socket *sock, int how)
> +{
> + struct mptcp_sock *msk = mptcp_sk(sock->sk);
> + int ret = 0;
> +
> + pr_debug("sk=%p, how=%d", msk, how);
> +
> + if (msk->subflow) {
> + pr_debug("subflow=%p", msk->subflow->sk);
> + ret = kernel_sock_shutdown(msk->subflow, how);
> + }
> + if (msk->connection_list) {
> + pr_debug("conn_list->subflow=%p", msk->connection_list->sk);
> + ret = kernel_sock_shutdown(msk->connection_list, how);
Just to be sure, can we have "subflow != NULL" and "connection_list !=
NULL"?
Because I saw the possible override of "ret" here but it is not possible
to have both a "subflow" and a "connection_list" (we could use a "else
if" here I guess).
Cheers,
Matthieu
> + }
> +
> + return ret;
> +}
> +
> static struct proto mptcp_prot = {
> .name = "MPTCP",
> .owner = THIS_MODULE,
> @@ -284,7 +303,7 @@ const struct proto_ops mptcp_stream_ops = {
> .poll = tcp_poll,
> .ioctl = inet_ioctl,
> .listen = mptcp_stream_listen,
> - .shutdown = inet_shutdown,
> + .shutdown = mptcp_stream_shutdown,
> .setsockopt = sock_common_setsockopt,
> .getsockopt = sock_common_getsockopt,
> .sendmsg = inet_sendmsg,
>
--
Matthieu Baerts | R&D Engineer
matthieu.baerts(a)tessares.net
Tessares SA | Hybrid Access Solutions
www.tessares.net
1 Avenue Jean Monnet, 1348 Louvain-la-Neuve, Belgium
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [MPTCP] [RFC PATCH v3 10/16] mptcp: Add shutdown() socket operation
@ 2018-10-11 11:24 Matthieu Baerts
0 siblings, 0 replies; 4+ messages in thread
From: Matthieu Baerts @ 2018-10-11 11:24 UTC (permalink / raw)
To: mptcp
[-- Attachment #1: Type: text/plain, Size: 3141 bytes --]
On Wed, Oct 10, 2018 at 10:42 PM Krystad, Peter <peter.krystad(a)intel.com> wrote:
>
> On Wed, 2018-10-10 at 14:43 +0200, Matthieu Baerts wrote:
> > Hi Peter,
> >
> > On 06/10/2018 00:59, Mat Martineau wrote:
> > > From: Peter Krystad <peter.krystad(a)intel.com>
> > >
> > > Signed-off-by: Peter Krystad <peter.krystad(a)intel.com>
> > > ---
> > > net/mptcp/protocol.c | 21 ++++++++++++++++++++-
> > > 1 file changed, 20 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> > > index 2fa9031a77ca..3d10ab287bd6 100644
> > > --- a/net/mptcp/protocol.c
> > > +++ b/net/mptcp/protocol.c
> > > @@ -255,6 +255,25 @@ int mptcp_stream_accept(struct socket *sock, struct socket *newsock, int flags,
> > > return inet_accept(sock, newsock, flags, kern);
> > > }
> > >
> > > +int mptcp_stream_shutdown(struct socket *sock, int how)
> > > +{
> > > + struct mptcp_sock *msk = mptcp_sk(sock->sk);
> > > + int ret = 0;
> > > +
> > > + pr_debug("sk=%p, how=%d", msk, how);
> > > +
> > > + if (msk->subflow) {
> > > + pr_debug("subflow=%p", msk->subflow->sk);
> > > + ret = kernel_sock_shutdown(msk->subflow, how);
> > > + }
> > > + if (msk->connection_list) {
> > > + pr_debug("conn_list->subflow=%p", msk->connection_list->sk);
> > > + ret = kernel_sock_shutdown(msk->connection_list, how);
> >
> > Just to be sure, can we have "subflow != NULL" and "connection_list !=
> > NULL"?
> > Because I saw the possible override of "ret" here but it is not possible
> > to have both a "subflow" and a "connection_list" (we could use a "else
> > if" here I guess).
>
> Your point is good, it should not be possible for them both to be set.
>
>
> But in a future commit the connection_list will become a real rcu
> linked list of subflows and a single lock will be used to protect the
> list and the subflow field. When the in-progress subflow is done
> connecting it will be moved to the connection list under lock
> protection.
Yes, sorry I should have added another comment after have seen that.
Thank you for the precision!
Matthieu
> Peter.
>
> > Cheers,
> > Matthieu
> >
> > > + }
> > > +
> > > + return ret;
> > > +}
> > > +
> > > static struct proto mptcp_prot = {
> > > .name = "MPTCP",
> > > .owner = THIS_MODULE,
> > > @@ -284,7 +303,7 @@ const struct proto_ops mptcp_stream_ops = {
> > > .poll = tcp_poll,
> > > .ioctl = inet_ioctl,
> > > .listen = mptcp_stream_listen,
> > > - .shutdown = inet_shutdown,
> > > + .shutdown = mptcp_stream_shutdown,
> > > .setsockopt = sock_common_setsockopt,
> > > .getsockopt = sock_common_getsockopt,
> > > .sendmsg = inet_sendmsg,
> > >
> >
> >
--
Matthieu Baerts | R&D Engineer
matthieu.baerts(a)tessares.net
Tessares SA | Hybrid Access Solutions
www.tessares.net
1 Avenue Jean Monnet, 1348 Louvain-la-Neuve, Belgium
Disclaimer: https://www.tessares.net/mail-disclaimer/
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [MPTCP] [RFC PATCH v3 10/16] mptcp: Add shutdown() socket operation
@ 2018-10-10 20:42 Krystad, Peter
0 siblings, 0 replies; 4+ messages in thread
From: Krystad, Peter @ 2018-10-10 20:42 UTC (permalink / raw)
To: mptcp
[-- Attachment #1: Type: text/plain, Size: 2421 bytes --]
On Wed, 2018-10-10 at 14:43 +0200, Matthieu Baerts wrote:
> Hi Peter,
>
> On 06/10/2018 00:59, Mat Martineau wrote:
> > From: Peter Krystad <peter.krystad(a)intel.com>
> >
> > Signed-off-by: Peter Krystad <peter.krystad(a)intel.com>
> > ---
> > net/mptcp/protocol.c | 21 ++++++++++++++++++++-
> > 1 file changed, 20 insertions(+), 1 deletion(-)
> >
> > diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> > index 2fa9031a77ca..3d10ab287bd6 100644
> > --- a/net/mptcp/protocol.c
> > +++ b/net/mptcp/protocol.c
> > @@ -255,6 +255,25 @@ int mptcp_stream_accept(struct socket *sock, struct socket *newsock, int flags,
> > return inet_accept(sock, newsock, flags, kern);
> > }
> >
> > +int mptcp_stream_shutdown(struct socket *sock, int how)
> > +{
> > + struct mptcp_sock *msk = mptcp_sk(sock->sk);
> > + int ret = 0;
> > +
> > + pr_debug("sk=%p, how=%d", msk, how);
> > +
> > + if (msk->subflow) {
> > + pr_debug("subflow=%p", msk->subflow->sk);
> > + ret = kernel_sock_shutdown(msk->subflow, how);
> > + }
> > + if (msk->connection_list) {
> > + pr_debug("conn_list->subflow=%p", msk->connection_list->sk);
> > + ret = kernel_sock_shutdown(msk->connection_list, how);
>
> Just to be sure, can we have "subflow != NULL" and "connection_list !=
> NULL"?
> Because I saw the possible override of "ret" here but it is not possible
> to have both a "subflow" and a "connection_list" (we could use a "else
> if" here I guess).
Your point is good, it should not be possible for them both to be set.
But in a future commit the connection_list will become a real rcu
linked list of subflows and a single lock will be used to protect the
list and the subflow field. When the in-progress subflow is done
connecting it will be moved to the connection list under lock
protection.
Peter.
> Cheers,
> Matthieu
>
> > + }
> > +
> > + return ret;
> > +}
> > +
> > static struct proto mptcp_prot = {
> > .name = "MPTCP",
> > .owner = THIS_MODULE,
> > @@ -284,7 +303,7 @@ const struct proto_ops mptcp_stream_ops = {
> > .poll = tcp_poll,
> > .ioctl = inet_ioctl,
> > .listen = mptcp_stream_listen,
> > - .shutdown = inet_shutdown,
> > + .shutdown = mptcp_stream_shutdown,
> > .setsockopt = sock_common_setsockopt,
> > .getsockopt = sock_common_getsockopt,
> > .sendmsg = inet_sendmsg,
> >
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [MPTCP] [RFC PATCH v3 10/16] mptcp: Add shutdown() socket operation
@ 2018-10-05 22:59 Mat Martineau
0 siblings, 0 replies; 4+ messages in thread
From: Mat Martineau @ 2018-10-05 22:59 UTC (permalink / raw)
To: mptcp
[-- Attachment #1: Type: text/plain, Size: 1461 bytes --]
From: Peter Krystad <peter.krystad(a)intel.com>
Signed-off-by: Peter Krystad <peter.krystad(a)intel.com>
---
net/mptcp/protocol.c | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 2fa9031a77ca..3d10ab287bd6 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -255,6 +255,25 @@ int mptcp_stream_accept(struct socket *sock, struct socket *newsock, int flags,
return inet_accept(sock, newsock, flags, kern);
}
+int mptcp_stream_shutdown(struct socket *sock, int how)
+{
+ struct mptcp_sock *msk = mptcp_sk(sock->sk);
+ int ret = 0;
+
+ pr_debug("sk=%p, how=%d", msk, how);
+
+ if (msk->subflow) {
+ pr_debug("subflow=%p", msk->subflow->sk);
+ ret = kernel_sock_shutdown(msk->subflow, how);
+ }
+ if (msk->connection_list) {
+ pr_debug("conn_list->subflow=%p", msk->connection_list->sk);
+ ret = kernel_sock_shutdown(msk->connection_list, how);
+ }
+
+ return ret;
+}
+
static struct proto mptcp_prot = {
.name = "MPTCP",
.owner = THIS_MODULE,
@@ -284,7 +303,7 @@ const struct proto_ops mptcp_stream_ops = {
.poll = tcp_poll,
.ioctl = inet_ioctl,
.listen = mptcp_stream_listen,
- .shutdown = inet_shutdown,
+ .shutdown = mptcp_stream_shutdown,
.setsockopt = sock_common_setsockopt,
.getsockopt = sock_common_getsockopt,
.sendmsg = inet_sendmsg,
--
2.19.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-10-11 11:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-10 12:43 [MPTCP] [RFC PATCH v3 10/16] mptcp: Add shutdown() socket operation Matthieu Baerts
-- strict thread matches above, loose matches on Subject: below --
2018-10-11 11:24 Matthieu Baerts
2018-10-10 20:42 Krystad, Peter
2018-10-05 22:59 Mat Martineau
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.