mirror of https://gitee.com/openkylin/linux.git
SUNRPC: TCP/UDP always close the old socket before reconnecting
It is not safe to call xs_reset_transport() from inside xs_udp_setup_socket() or xs_tcp_setup_socket(), since they do not own the correct locks. Instead, do it in xs_connect(). Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
parent
718ba5b873
commit
de84d89030
|
@ -2081,8 +2081,6 @@ static void xs_udp_setup_socket(struct work_struct *work)
|
||||||
struct socket *sock = transport->sock;
|
struct socket *sock = transport->sock;
|
||||||
int status = -EIO;
|
int status = -EIO;
|
||||||
|
|
||||||
/* Start by resetting any existing state */
|
|
||||||
xs_reset_transport(transport);
|
|
||||||
sock = xs_create_sock(xprt, transport,
|
sock = xs_create_sock(xprt, transport,
|
||||||
xs_addr(xprt)->sa_family, SOCK_DGRAM,
|
xs_addr(xprt)->sa_family, SOCK_DGRAM,
|
||||||
IPPROTO_UDP, false);
|
IPPROTO_UDP, false);
|
||||||
|
@ -2328,6 +2326,9 @@ static void xs_connect(struct rpc_xprt *xprt, struct rpc_task *task)
|
||||||
|
|
||||||
WARN_ON_ONCE(!xprt_lock_connect(xprt, task, transport));
|
WARN_ON_ONCE(!xprt_lock_connect(xprt, task, transport));
|
||||||
|
|
||||||
|
/* Start by resetting any existing state */
|
||||||
|
xs_reset_transport(transport);
|
||||||
|
|
||||||
if (transport->sock != NULL && !RPC_IS_SOFTCONN(task)) {
|
if (transport->sock != NULL && !RPC_IS_SOFTCONN(task)) {
|
||||||
dprintk("RPC: xs_connect delayed xprt %p for %lu "
|
dprintk("RPC: xs_connect delayed xprt %p for %lu "
|
||||||
"seconds\n",
|
"seconds\n",
|
||||||
|
|
Loading…
Reference in New Issue