forked from mirrors/linux
		
	net/rds: fix WARNING in rds_conn_connect_if_down
If connection isn't established yet, get_mr() will fail, trigger connection after
get_mr().
Fixes: 584a8279a4 ("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>
			
			
This commit is contained in:
		
							parent
							
								
									f287d6aafd
								
							
						
					
					
						commit
						c055fc00c0
					
				
					 2 changed files with 4 additions and 5 deletions
				
			
		|  | @ -301,6 +301,9 @@ static int __rds_rdma_map(struct rds_sock *rs, struct rds_get_mr_args *args, | ||||||
| 			kfree(sg); | 			kfree(sg); | ||||||
| 		} | 		} | ||||||
| 		ret = PTR_ERR(trans_private); | 		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; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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. */ | 	/* Parse any control messages the user may have included. */ | ||||||
| 	ret = rds_cmsg_send(rs, rm, msg, &allocated_mr, &vct); | 	ret = rds_cmsg_send(rs, rm, msg, &allocated_mr, &vct); | ||||||
| 	if (ret) { | 	if (ret) | ||||||
| 		/* Trigger connection so that its ready for the next retry */ |  | ||||||
| 		if (ret ==  -EAGAIN) |  | ||||||
| 			rds_conn_connect_if_down(conn); |  | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	if (rm->rdma.op_active && !conn->c_trans->xmit_rdma) { | 	if (rm->rdma.op_active && !conn->c_trans->xmit_rdma) { | ||||||
| 		printk_ratelimited(KERN_NOTICE "rdma_op %p conn xmit_rdma %p\n", | 		printk_ratelimited(KERN_NOTICE "rdma_op %p conn xmit_rdma %p\n", | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Edward Adam Davis
						Edward Adam Davis