From: Henrique Carvalho <henrique.carvalho@suse.com>
To: linux-cifs@vger.kernel.org
Cc: sfrench@samba.org, linkinjeon@kernel.org, metze@samba.org,
pc@manguebit.com, ronniesahlberg@gmail.com,
sprasad@microsoft.com, tom@talpey.com, bharathsm@microsoft.com,
ematsumiya@suse.de,
Henrique Carvalho <henrique.carvalho@suse.com>
Subject: [PATCH 02/11] smb: client: prepare connect path for QUIC transport
Date: Tue, 28 Apr 2026 12:45:59 -0300 [thread overview]
Message-ID: <20260428154604.222551-4-henrique.carvalho@suse.com> (raw)
In-Reply-To: <20260428154604.222551-1-henrique.carvalho@suse.com>
Refactor the connect path to ease introducing QUIC as an alternative
transport alongside TCP and RDMA.
No functional change intended.
Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
---
fs/smb/client/connect.c | 56 ++++++++++++++++++++++++++++-------------
1 file changed, 39 insertions(+), 17 deletions(-)
diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c
index 92962d63d256..33d619007905 100644
--- a/fs/smb/client/connect.c
+++ b/fs/smb/client/connect.c
@@ -62,11 +62,18 @@ static int ip_connect(struct TCP_Server_Info *server);
static int generic_ip_connect(struct TCP_Server_Info *server);
static void tlink_rb_insert(struct rb_root *root, struct tcon_link *new_tlink);
static void cifs_prune_tlinks(struct work_struct *work);
+static void smb_sock_release(struct TCP_Server_Info *server);
static struct mchan_mount *mchan_mount_alloc(struct cifs_ses *ses);
static void mchan_mount_free(struct mchan_mount *mchan_mount);
static void mchan_mount_work_fn(struct work_struct *work);
+static void smb_sock_release(struct TCP_Server_Info *server)
+{
+ sock_release(server->ssocket);
+ server->ssocket = NULL;
+}
+
/*
* Resolve hostname and set ip addr in tcp ses. Useful for hostnames that may
* get their ip addresses changed at some point.
@@ -311,8 +318,7 @@ cifs_abort_connection(struct TCP_Server_Info *server)
kernel_sock_shutdown(server->ssocket, SHUT_WR);
cifs_dbg(FYI, "Post shutdown state: 0x%x Flags: 0x%lx\n", server->ssocket->state,
server->ssocket->flags);
- sock_release(server->ssocket);
- server->ssocket = NULL;
+ smb_sock_release(server);
}
server->sequence_number = 0;
server->session_estab = false;
@@ -1077,10 +1083,8 @@ clean_demultiplex_info(struct TCP_Server_Info *server)
wake_up_all(&server->request_q);
/* give those requests time to exit */
msleep(125);
- if (server->ssocket) {
- sock_release(server->ssocket);
- server->ssocket = NULL;
- }
+
+ smb_sock_release(server);
if (!list_empty(&server->pending_mid_q)) {
struct mid_q_entry *mid_entry;
@@ -1778,7 +1782,11 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
tcp_ses->noblocksnd = ctx->noblocksnd || ctx->rootfs;
tcp_ses->noautotune = ctx->noautotune;
tcp_ses->tcp_nodelay = ctx->sockopt_tcp_nodelay;
- tcp_ses->ipproto = ctx->rdma ? IPPROTO_SMBDIRECT : IPPROTO_TCP;
+ if (ctx->rdma)
+ tcp_ses->ipproto = IPPROTO_SMBDIRECT;
+ else
+ tcp_ses->ipproto = IPPROTO_TCP;
+
tcp_ses->in_flight = 0;
tcp_ses->max_in_flight = 0;
tcp_ses->credits = 1;
@@ -1895,8 +1903,7 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
cifs_put_tcp_session(tcp_ses->primary_server, false);
kfree(tcp_ses->hostname);
kfree(tcp_ses->leaf_fullpath);
- if (tcp_ses->ssocket)
- sock_release(tcp_ses->ssocket);
+ smb_sock_release(tcp_ses);
kfree(tcp_ses);
}
return ERR_PTR(rc);
@@ -3297,13 +3304,29 @@ ip_rfc1001_connect(struct TCP_Server_Info *server)
return 0;
}
+static inline const char *
+get_protocol_name(struct TCP_Server_Info *server)
+{
+ switch (server->ipproto) {
+ case IPPROTO_TCP:
+ return "tcp";
+ case IPPROTO_QUIC:
+ return "quic";
+ case IPPROTO_SMBDIRECT:
+ return "smbdirect";
+ default:
+ cifs_dbg(VFS, "Unknown ipproto value: %d", server->ipproto);
+ return "unknown";
+ }
+}
+
static int
generic_ip_connect(struct TCP_Server_Info *server)
{
struct sockaddr *saddr;
struct socket *socket;
int slen, sfamily;
- const char *pname = cifs_rdma_enabled(server) ? "smbdirect" : "tcp";
+ const char *pname = get_protocol_name(server);
__be16 sport;
int rc = 0;
@@ -3327,10 +3350,7 @@ generic_ip_connect(struct TCP_Server_Info *server)
__func__, pname, &ipv4->sin_addr, ntohs(sport));
}
- if (server->ssocket) {
- sock_release(server->ssocket);
- server->ssocket = NULL;
- }
+ smb_sock_release(server);
{
struct net *net = cifs_net_ns(server);
@@ -3383,7 +3403,7 @@ generic_ip_connect(struct TCP_Server_Info *server)
if (server->tcp_nodelay)
tcp_sock_set_nodelay(socket->sk);
- if (server->ipproto == IPPROTO_SMBDIRECT) {
+ if (cifs_rdma_enabled(server)) {
rc = smbd_prepare_socket(server, ntohs(sport));
if (rc < 0) {
cifs_dbg(FYI, "Error %d from smbd_prepare_socket(port=%u)\n",
@@ -3431,8 +3451,7 @@ generic_ip_connect(struct TCP_Server_Info *server)
close_socket:
trace_smb3_connect_err(server->hostname, server->conn_id, &server->dstaddr, rc);
- sock_release(socket);
- server->ssocket = NULL;
+ smb_sock_release(server);
return rc;
}
@@ -3465,6 +3484,9 @@ ip_connect(struct TCP_Server_Info *server)
if (rc >= 0)
return rc;
+ if (!port2)
+ return rc;
+
/* if it failed, try with port2 */
*sport = htons(port2);
}
--
2.53.0
next prev parent reply other threads:[~2026-04-28 15:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-28 15:45 [PATCH 00/11] smb: implement SMB over QUIC Henrique Carvalho
2026-04-28 15:45 ` [PATCH 01/11] smb: client: refactor negotiate context assembly Henrique Carvalho
2026-04-28 15:45 ` [PATCH 01/11] smb: common: add smb_tls struct shared by client and server Henrique Carvalho
2026-04-28 15:45 ` Henrique Carvalho [this message]
2026-04-28 15:46 ` [PATCH 02/11] smb: client: refactor negotiate context assembly Henrique Carvalho
2026-04-28 15:46 ` [PATCH 03/11] smb: client: add QUIC mount and transport setup Henrique Carvalho
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=20260428154604.222551-4-henrique.carvalho@suse.com \
--to=henrique.carvalho@suse.com \
--cc=bharathsm@microsoft.com \
--cc=ematsumiya@suse.de \
--cc=linkinjeon@kernel.org \
--cc=linux-cifs@vger.kernel.org \
--cc=metze@samba.org \
--cc=pc@manguebit.com \
--cc=ronniesahlberg@gmail.com \
--cc=sfrench@samba.org \
--cc=sprasad@microsoft.com \
--cc=tom@talpey.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).