Patch "net/smc: initialize close_work early to avoid warning" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net/smc: initialize close_work early to avoid warning

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-smc-initialize-close_work-early-to-avoid-warning.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 2abd14f64246ccfa5bbaa214b9e7247ba5bd9f07
Author: Wen Gu <guwen@xxxxxxxxxxxxxxxxx>
Date:   Wed Nov 27 21:30:13 2024 +0800

    net/smc: initialize close_work early to avoid warning
    
    [ Upstream commit 0541db8ee32c09463a72d0987382b3a3336b0043 ]
    
    We encountered a warning that close_work was canceled before
    initialization.
    
      WARNING: CPU: 7 PID: 111103 at kernel/workqueue.c:3047 __flush_work+0x19e/0x1b0
      Workqueue: events smc_lgr_terminate_work [smc]
      RIP: 0010:__flush_work+0x19e/0x1b0
      Call Trace:
       ? __wake_up_common+0x7a/0x190
       ? work_busy+0x80/0x80
       __cancel_work_timer+0xe3/0x160
       smc_close_cancel_work+0x1a/0x70 [smc]
       smc_close_active_abort+0x207/0x360 [smc]
       __smc_lgr_terminate.part.38+0xc8/0x180 [smc]
       process_one_work+0x19e/0x340
       worker_thread+0x30/0x370
       ? process_one_work+0x340/0x340
       kthread+0x117/0x130
       ? __kthread_cancel_work+0x50/0x50
       ret_from_fork+0x22/0x30
    
    This is because when smc_close_cancel_work is triggered, e.g. the RDMA
    driver is rmmod and the LGR is terminated, the conn->close_work is
    flushed before initialization, resulting in WARN_ON(!work->func).
    
    __smc_lgr_terminate             | smc_connect_{rdma|ism}
    -------------------------------------------------------------
                                    | smc_conn_create
                                    | \- smc_lgr_register_conn
    for conn in lgr->conns_all      |
    \- smc_conn_kill                |
       \- smc_close_active_abort    |
          \- smc_close_cancel_work  |
             \- cancel_work_sync    |
                \- __flush_work     |
                     (close_work)   |
                                    | smc_close_init
                                    | \- INIT_WORK(&close_work)
    
    So fix this by initializing close_work before establishing the
    connection.
    
    Fixes: 46c28dbd4c23 ("net/smc: no socket state changes in tasklet context")
    Fixes: 413498440e30 ("net/smc: add SMC-D support in af_smc")
    Signed-off-by: Wen Gu <guwen@xxxxxxxxxxxxxxxxx>
    Reviewed-by: Wenjia Zhang <wenjia@xxxxxxxxxxxxx>
    Reviewed-by: Alexandra Winter <wintera@xxxxxxxxxxxxx>
    Signed-off-by: Paolo Abeni <pabeni@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
index f343e91eec0e4..755659703a625 100644
--- a/net/smc/af_smc.c
+++ b/net/smc/af_smc.c
@@ -383,6 +383,7 @@ void smc_sk_init(struct net *net, struct sock *sk, int protocol)
 	smc->limit_smc_hs = net->smc.limit_smc_hs;
 	smc->use_fallback = false; /* assume rdma capability first */
 	smc->fallback_rsn = 0;
+	smc_close_init(smc);
 }
 
 static struct sock *smc_sock_alloc(struct net *net, struct socket *sock,
@@ -1298,7 +1299,6 @@ static int smc_connect_rdma(struct smc_sock *smc,
 		goto connect_abort;
 	}
 
-	smc_close_init(smc);
 	smc_rx_init(smc);
 
 	if (ini->first_contact_local) {
@@ -1434,7 +1434,6 @@ static int smc_connect_ism(struct smc_sock *smc,
 			goto connect_abort;
 		}
 	}
-	smc_close_init(smc);
 	smc_rx_init(smc);
 	smc_tx_init(smc);
 
@@ -2486,7 +2485,6 @@ static void smc_listen_work(struct work_struct *work)
 		goto out_decl;
 
 	mutex_lock(&smc_server_lgr_pending);
-	smc_close_init(new_smc);
 	smc_rx_init(new_smc);
 	smc_tx_init(new_smc);
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux