FAILED: patch "[PATCH] cifs: all initializations for tcon should happen in" failed to apply to 6.6-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x 74ebd02163fde05baa23129e06dde4b8f0f2377a
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025070801-extended-myspace-c081@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 74ebd02163fde05baa23129e06dde4b8f0f2377a Mon Sep 17 00:00:00 2001
From: Shyam Prasad N <[email protected]>
Date: Mon, 30 Jun 2025 23:09:34 +0530
Subject: [PATCH] cifs: all initializations for tcon should happen in
tcon_info_alloc
Today, a few work structs inside tcon are initialized inside cifs_get_tcon and not in tcon_info_alloc. As a result, if a tcon is obtained from tcon_info_alloc, but not called as a part of cifs_get_tcon, we may trip over.
fs/smb/client/cifsproto.h +1 -0
@@ -136,6 +136,7 @@ extern int SendReceiveBlockingLock(const unsigned int xid,struct smb_hdr *out_buf, int *bytes_returned); +void smb2_query_server_interfaces (struct work_struct *work);void cifs_signal_cifsd_for_reconnect (struct TCP_Server_Info *server,bool all_channels);
fs/smb/client/connect.c +1 -7
@@ -97,7 +97,7 @@ static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server)return rc; } -static void smb2_query_server_interfaces (struct work_struct *work) +void smb2_query_server_interfaces (struct work_struct *work) {int rc;int xid;
@@ -2880,20 +2880,14 @@ cifs_get_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx) tcon->max_cached_dirs = ctx->max_cached_dirs; tcon->nodelete = ctx->nodelete; tcon->local_lease = ctx->local_lease; -INIT_LIST_HEAD (&tcon->pending_opens); tcon->status =TID_GOOD ; -INIT_DELAYED_WORK (&tcon->query_interfaces, - smb2_query_server_interfaces);if (ses->server->dialect >=SMB30_PROT_ID && (ses->server->capabilities &SMB2_GLOBAL_CAP_MULTI_CHANNEL )) {/* schedule query interfaces poll */ queue_delayed_work (cifsiod_wq, &tcon->query_interfaces, (SMB_INTERFACE_POLL_INTERVAL *HZ )); } -#ifdef CONFIG_CIFS_DFS_UPCALL -INIT_DELAYED_WORK (&tcon->dfs_cache_work, dfs_cache_refresh); -#endif spin_lock (&cifs_tcp_ses_lock);list_add (&tcon->tcon_list, &ses->tcon_list);spin_unlock (&cifs_tcp_ses_lock);
fs/smb/client/misc.c +6 -0
@@ -151,6 +151,12 @@ tcon_info_alloc(bool dir_leases_enabled, enum smb3_tcon_ref_trace trace)#ifdef CONFIG_CIFS_DFS_UPCALL INIT_LIST_HEAD (&ret_buf->dfs_ses_list);#endif +INIT_LIST_HEAD (&ret_buf->pending_opens); +INIT_DELAYED_WORK (&ret_buf->query_interfaces, + smb2_query_server_interfaces); +#ifdef CONFIG_CIFS_DFS_UPCALL +INIT_DELAYED_WORK (&ret_buf->dfs_cache_work, dfs_cache_refresh); +#endif return ret_buf; }