All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heming Zhao <heming.zhao@suse.com>
To: Alexander Aring <aahringo@redhat.com>, teigland@redhat.com
Cc: gfs2@lists.linux.dev, glass.su@suse.com, lidong.zhong@suse.com
Subject: Re: [RFC PATCH dlm/next 2/4] dlm: use SHUT_RDWR for SCTP shutdown
Date: Wed, 30 Apr 2025 15:15:37 +0800	[thread overview]
Message-ID: <8bf06a86-deb9-40e2-b672-13b04ea727b4@suse.com> (raw)
In-Reply-To: <20250429202913.2908521-2-aahringo@redhat.com>

On 4/30/25 04:29, Alexander Aring wrote:
> Currently SCTP shutdown() call gets stuck because there is no incoming
> EOF indicator on its socket. On the peer side the EOF indicator as
> recvmsg() returns 0 will be triggered as mechanism to flush the socket
> queue on the receive side. In SCTP recvmsg() function sctp_recvmsg() we
> can see that only if sk_shutdown has the bit RCV_SHUTDOWN set SCTP will
> recvmsg() will return EOF. The RCV_SHUTDOWN bit will only be set when
> shutdown with SHUT_RD is called. We use now SHUT_RDWR to also get a EOF
> indicator from recvmsg() call on the shutdown() initiator.
> 
> SCTP does not support half closed sockets and the semantic of SHUT_WR is
> different here, it seems that calling SHUT_WR on sctp sockets keeps the
> socket open to have the possibility to do some specific SCTP operations on
> it that we don't do here.
> 
> There exists still a difference in the limitations of TCP vs SCTP in
> case if we are required to have a half closed socket functionality. This
> was tried to archieve with DLM protocol changes in the past and
> hopefully we really don't require half closed socket functionality.
> 
> Signed-off-by: Alexander Aring <aahringo@redhat.com>

Tested-by: Heming zhao <heming.zhao@suse.com>
Reviewed-by: Heming zhao <heming.zhao@suse.com>

> ---
>   fs/dlm/lowcomms.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c
> index 50c42b368c83..e4373bce1bc2 100644
> --- a/fs/dlm/lowcomms.c
> +++ b/fs/dlm/lowcomms.c
> @@ -160,6 +160,7 @@ struct dlm_proto_ops {
>   	bool try_new_addr;
>   	const char *name;
>   	int proto;
> +	int how;
>   
>   	void (*sockopts)(struct socket *sock);
>   	int (*bind)(struct socket *sock);
> @@ -810,7 +811,7 @@ static void shutdown_connection(struct connection *con, bool and_other)
>   		return;
>   	}
>   
> -	ret = kernel_sock_shutdown(con->sock, SHUT_WR);
> +	ret = kernel_sock_shutdown(con->sock, dlm_proto_ops->how);
>   	up_read(&con->sock_lock);
>   	if (ret) {
>   		log_print("Connection %p failed to shutdown: %d will force close",
> @@ -1858,6 +1859,7 @@ static int dlm_tcp_listen_bind(struct socket *sock)
>   static const struct dlm_proto_ops dlm_tcp_ops = {
>   	.name = "TCP",
>   	.proto = IPPROTO_TCP,
> +	.how = SHUT_WR,
>   	.sockopts = dlm_tcp_sockopts,
>   	.bind = dlm_tcp_bind,
>   	.listen_validate = dlm_tcp_listen_validate,
> @@ -1896,6 +1898,7 @@ static void dlm_sctp_sockopts(struct socket *sock)
>   static const struct dlm_proto_ops dlm_sctp_ops = {
>   	.name = "SCTP",
>   	.proto = IPPROTO_SCTP,
> +	.how = SHUT_RDWR,
>   	.try_new_addr = true,
>   	.sockopts = dlm_sctp_sockopts,
>   	.bind = dlm_sctp_bind,


  reply	other threads:[~2025-04-30  7:15 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-29 20:29 [RFC PATCH dlm/next 1/4] dlm: mask sk_shutdown value Alexander Aring
2025-04-29 20:29 ` [RFC PATCH dlm/next 2/4] dlm: use SHUT_RDWR for SCTP shutdown Alexander Aring
2025-04-30  7:15   ` Heming Zhao [this message]
2025-04-29 20:29 ` [RFC PATCH dlm/next 3/4] dlm: reject SCTP configuration if not enabled Alexander Aring
2025-04-30  7:15   ` Heming Zhao
2025-04-29 20:29 ` [RFC PATCH dlm/next 4/4] dlm: drop SCTP Kconfig dependency Alexander Aring
2025-04-30  7:15   ` Heming Zhao
2025-04-30  7:15 ` [RFC PATCH dlm/next 1/4] dlm: mask sk_shutdown value Heming Zhao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8bf06a86-deb9-40e2-b672-13b04ea727b4@suse.com \
    --to=heming.zhao@suse.com \
    --cc=aahringo@redhat.com \
    --cc=gfs2@lists.linux.dev \
    --cc=glass.su@suse.com \
    --cc=lidong.zhong@suse.com \
    --cc=teigland@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.