Thread (21 messages) 21 messages, 5 authors, 2023-10-31

Re: [PATCH net 3/5] net/smc: allow cdc msg send rather than drop it with NULL sndbuf_desc

From: Wenjia Zhang <wenjia@linux.ibm.com>
Date: 2023-10-12 15:15:32
Also in: linux-rdma, linux-s390


On 12.10.23 04:49, D. Wythe wrote:

On 10/12/23 4:37 AM, Wenjia Zhang wrote:
quoted

On 11.10.23 09:33, D. Wythe wrote:
quoted
From: "D. Wythe" <alibuda@linux.alibaba.com>

This patch re-fix the issues memtianed by commit 22a825c541d7
("net/smc: fix NULL sndbuf_desc in smc_cdc_tx_handler()").

Blocking sending message do solve the issues though, but it also
prevents the peer to receive the final message. Besides, in logic,
whether the sndbuf_desc is NULL or not have no impact on the processing
of cdc message sending.
Agree.
quoted
Hence that, this patch allow the cdc message sending but to check the
sndbuf_desc with care in smc_cdc_tx_handler().

Fixes: 22a825c541d7 ("net/smc: fix NULL sndbuf_desc in 
smc_cdc_tx_handler()")
Signed-off-by: D. Wythe <alibuda@linux.alibaba.com>
---
  net/smc/smc_cdc.c | 9 ++++-----
  1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/net/smc/smc_cdc.c b/net/smc/smc_cdc.c
index 01bdb79..3c06625 100644
--- a/net/smc/smc_cdc.c
+++ b/net/smc/smc_cdc.c
@@ -28,13 +28,15 @@ static void smc_cdc_tx_handler(struct 
smc_wr_tx_pend_priv *pnd_snd,
  {
      struct smc_cdc_tx_pend *cdcpend = (struct smc_cdc_tx_pend 
*)pnd_snd;
      struct smc_connection *conn = cdcpend->conn;
+    struct smc_buf_desc *sndbuf_desc;
      struct smc_sock *smc;
      int diff;
  +    sndbuf_desc = conn->sndbuf_desc;
      smc = container_of(conn, struct smc_sock, conn);
      bh_lock_sock(&smc->sk);
-    if (!wc_status) {
-        diff = smc_curs_diff(cdcpend->conn->sndbuf_desc->len,
+    if (!wc_status && sndbuf_desc) {
+        diff = smc_curs_diff(sndbuf_desc->len,
How could this guarantee that the sndbuf_desc would not be NULL?
It can not guarantee he sndbuf_desc would not be NULL, but it will prevents
the smc_cdc_tx_handler() to access a NULL sndbuf_desc. So that we
can avoid the panic descried in commit 22a825c541d7
("net/smc: fix NULL sndbuf_desc in smc_cdc_tx_handler()").
got it, thanks!

Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
quoted
quoted
&cdcpend->conn->tx_curs_fin,
                       &cdcpend->cursor);
          /* sndbuf_space is decreased in smc_sendmsg */
@@ -114,9 +116,6 @@ int smc_cdc_msg_send(struct smc_connection *conn,
      union smc_host_cursor cfed;
      int rc;
  -    if (unlikely(!READ_ONCE(conn->sndbuf_desc)))
-        return -ENOBUFS;
-
      smc_cdc_add_pending_send(conn, pend);
        conn->tx_cdc_seq++;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help