public inbox for gfs2@lists.linux.dev
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox