Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78685414 authored by Edward Adam Davis's avatar Edward Adam Davis Committed by Sasha Levin
Browse files

net/rds: fix WARNING in rds_conn_connect_if_down



[ Upstream commit c055fc00c07be1f0df7375ab0036cebd1106ed38 ]

If connection isn't established yet, get_mr() will fail, trigger connection after
get_mr().

Fixes: 584a8279 ("RDS: RDMA: return appropriate error on rdma map failures")
Reported-and-tested-by: default avatar <syzbot+d4faee732755bba9838e@syzkaller.appspotmail.com>
Signed-off-by: default avatarEdward Adam Davis <eadavis@qq.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 31ea5bcc
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -278,6 +278,9 @@ static int __rds_rdma_map(struct rds_sock *rs, struct rds_get_mr_args *args,
			put_page(sg_page(&sg[i]));
		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;
	}

+1 −5
Original line number Diff line number Diff line
@@ -1300,12 +1300,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",