|
@@ -1895,6 +1895,8 @@ static void xs_local_setup_socket(struct work_struct *work)
|
|
|
if (xprt->shutdown)
|
|
|
goto out;
|
|
|
|
|
|
+ current->flags |= PF_FSTRANS;
|
|
|
+
|
|
|
clear_bit(XPRT_CONNECTION_ABORT, &xprt->state);
|
|
|
status = __sock_create(xprt->xprt_net, AF_LOCAL,
|
|
|
SOCK_STREAM, 0, &sock, 1);
|
|
@@ -1928,6 +1930,7 @@ static void xs_local_setup_socket(struct work_struct *work)
|
|
|
out:
|
|
|
xprt_clear_connecting(xprt);
|
|
|
xprt_wake_pending_tasks(xprt, status);
|
|
|
+ current->flags &= ~PF_FSTRANS;
|
|
|
}
|
|
|
|
|
|
static void xs_udp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
|
|
@@ -1970,6 +1973,8 @@ static void xs_udp_setup_socket(struct work_struct *work)
|
|
|
if (xprt->shutdown)
|
|
|
goto out;
|
|
|
|
|
|
+ current->flags |= PF_FSTRANS;
|
|
|
+
|
|
|
/* Start by resetting any existing state */
|
|
|
xs_reset_transport(transport);
|
|
|
sock = xs_create_sock(xprt, transport,
|
|
@@ -1988,6 +1993,7 @@ static void xs_udp_setup_socket(struct work_struct *work)
|
|
|
out:
|
|
|
xprt_clear_connecting(xprt);
|
|
|
xprt_wake_pending_tasks(xprt, status);
|
|
|
+ current->flags &= ~PF_FSTRANS;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -2113,6 +2119,8 @@ static void xs_tcp_setup_socket(struct work_struct *work)
|
|
|
if (xprt->shutdown)
|
|
|
goto out;
|
|
|
|
|
|
+ current->flags |= PF_FSTRANS;
|
|
|
+
|
|
|
if (!sock) {
|
|
|
clear_bit(XPRT_CONNECTION_ABORT, &xprt->state);
|
|
|
sock = xs_create_sock(xprt, transport,
|
|
@@ -2162,6 +2170,7 @@ static void xs_tcp_setup_socket(struct work_struct *work)
|
|
|
case -EINPROGRESS:
|
|
|
case -EALREADY:
|
|
|
xprt_clear_connecting(xprt);
|
|
|
+ current->flags &= ~PF_FSTRANS;
|
|
|
return;
|
|
|
case -EINVAL:
|
|
|
/* Happens, for instance, if the user specified a link
|
|
@@ -2174,6 +2183,7 @@ out_eagain:
|
|
|
out:
|
|
|
xprt_clear_connecting(xprt);
|
|
|
xprt_wake_pending_tasks(xprt, status);
|
|
|
+ current->flags &= ~PF_FSTRANS;
|
|
|
}
|
|
|
|
|
|
/**
|