]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
net/rds: fix WARNING in rds_conn_connect_if_down
authorEdward Adam Davis <eadavis@qq.com>
Tue, 5 Mar 2024 00:13:08 +0000 (08:13 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 6 Mar 2024 11:58:42 +0000 (11:58 +0000)
If connection isn't established yet, get_mr() will fail, trigger connection after
get_mr().

Fixes: 584a8279a44a ("RDS: RDMA: return appropriate error on rdma map failures")
Reported-and-tested-by: syzbot+d4faee732755bba9838e@syzkaller.appspotmail.com
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/rds/rdma.c
net/rds/send.c

index fba82d36593add3317e89104aabbd69a0281cb33..a4e3c5de998be4c756cb0dc423ee9a7e7fa3e1a9 100644 (file)
@@ -301,6 +301,9 @@ static int __rds_rdma_map(struct rds_sock *rs, struct rds_get_mr_args *args,
                        kfree(sg);
                }
                ret = PTR_ERR(trans_private);
+               /* Trigger connection so that its ready for the next retry */
+               if (ret == -ENODEV)
+                       rds_conn_connect_if_down(cp->cp_conn);
                goto out;
        }
 
index 5e57a1581dc60571406e2faeeeba63af1e8aa29c..2899def23865fa47ce55faa7c7eb72fb52bc432b 100644 (file)
@@ -1313,12 +1313,8 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len)
 
        /* Parse any control messages the user may have included. */
        ret = rds_cmsg_send(rs, rm, msg, &allocated_mr, &vct);
-       if (ret) {
-               /* Trigger connection so that its ready for the next retry */
-               if (ret ==  -EAGAIN)
-                       rds_conn_connect_if_down(conn);
+       if (ret)
                goto out;
-       }
 
        if (rm->rdma.op_active && !conn->c_trans->xmit_rdma) {
                printk_ratelimited(KERN_NOTICE "rdma_op %p conn xmit_rdma %p\n",