|
@@ -653,8 +653,7 @@ static void xs_destroy(struct rpc_xprt *xprt)
|
|
|
|
|
|
dprintk("RPC: xs_destroy xprt %p\n", xprt);
|
|
|
|
|
|
- cancel_delayed_work(&transport->connect_worker);
|
|
|
- flush_scheduled_work();
|
|
|
+ cancel_rearming_delayed_work(&transport->connect_worker);
|
|
|
|
|
|
xprt_disconnect(xprt);
|
|
|
xs_close(xprt);
|
|
@@ -1001,7 +1000,7 @@ static void xs_tcp_state_change(struct sock *sk)
|
|
|
/* Try to schedule an autoclose RPC calls */
|
|
|
set_bit(XPRT_CLOSE_WAIT, &xprt->state);
|
|
|
if (test_and_set_bit(XPRT_LOCKED, &xprt->state) == 0)
|
|
|
- schedule_work(&xprt->task_cleanup);
|
|
|
+ queue_work(rpciod_workqueue, &xprt->task_cleanup);
|
|
|
default:
|
|
|
xprt_disconnect(xprt);
|
|
|
}
|
|
@@ -1410,18 +1409,16 @@ static void xs_connect(struct rpc_task *task)
|
|
|
dprintk("RPC: xs_connect delayed xprt %p for %lu "
|
|
|
"seconds\n",
|
|
|
xprt, xprt->reestablish_timeout / HZ);
|
|
|
- schedule_delayed_work(&transport->connect_worker,
|
|
|
- xprt->reestablish_timeout);
|
|
|
+ queue_delayed_work(rpciod_workqueue,
|
|
|
+ &transport->connect_worker,
|
|
|
+ xprt->reestablish_timeout);
|
|
|
xprt->reestablish_timeout <<= 1;
|
|
|
if (xprt->reestablish_timeout > XS_TCP_MAX_REEST_TO)
|
|
|
xprt->reestablish_timeout = XS_TCP_MAX_REEST_TO;
|
|
|
} else {
|
|
|
dprintk("RPC: xs_connect scheduled xprt %p\n", xprt);
|
|
|
- schedule_delayed_work(&transport->connect_worker, 0);
|
|
|
-
|
|
|
- /* flush_scheduled_work can sleep... */
|
|
|
- if (!RPC_IS_ASYNC(task))
|
|
|
- flush_scheduled_work();
|
|
|
+ queue_delayed_work(rpciod_workqueue,
|
|
|
+ &transport->connect_worker, 0);
|
|
|
}
|
|
|
}
|
|
|
|