SUNRPC: Queue latency-sensitive socket tasks to xprtiod
The response to a write_space notification is very latency sensitive, so we should queue it to the lower latency xprtiod_workqueue. This is something we already do for the other cases where an rpc task holds the transport XPRT_LOCKED bitlock. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
parent
0c8cbcd337
commit
2275cde4cc
|
@ -229,6 +229,9 @@ void rpc_sleep_on_priority(struct rpc_wait_queue *,
|
||||||
struct rpc_task *,
|
struct rpc_task *,
|
||||||
rpc_action action,
|
rpc_action action,
|
||||||
int priority);
|
int priority);
|
||||||
|
void rpc_wake_up_queued_task_on_wq(struct workqueue_struct *wq,
|
||||||
|
struct rpc_wait_queue *queue,
|
||||||
|
struct rpc_task *task);
|
||||||
void rpc_wake_up_queued_task(struct rpc_wait_queue *,
|
void rpc_wake_up_queued_task(struct rpc_wait_queue *,
|
||||||
struct rpc_task *);
|
struct rpc_task *);
|
||||||
void rpc_wake_up(struct rpc_wait_queue *);
|
void rpc_wake_up(struct rpc_wait_queue *);
|
||||||
|
|
|
@ -458,6 +458,18 @@ static void rpc_wake_up_task_queue_locked(struct rpc_wait_queue *queue, struct r
|
||||||
rpc_wake_up_task_on_wq_queue_locked(rpciod_workqueue, queue, task);
|
rpc_wake_up_task_on_wq_queue_locked(rpciod_workqueue, queue, task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wake up a task on a specific queue
|
||||||
|
*/
|
||||||
|
void rpc_wake_up_queued_task_on_wq(struct workqueue_struct *wq,
|
||||||
|
struct rpc_wait_queue *queue,
|
||||||
|
struct rpc_task *task)
|
||||||
|
{
|
||||||
|
spin_lock_bh(&queue->lock);
|
||||||
|
rpc_wake_up_task_on_wq_queue_locked(wq, queue, task);
|
||||||
|
spin_unlock_bh(&queue->lock);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wake up a task on a specific queue
|
* Wake up a task on a specific queue
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -517,7 +517,8 @@ void xprt_write_space(struct rpc_xprt *xprt)
|
||||||
if (xprt->snd_task) {
|
if (xprt->snd_task) {
|
||||||
dprintk("RPC: write space: waking waiting task on "
|
dprintk("RPC: write space: waking waiting task on "
|
||||||
"xprt %p\n", xprt);
|
"xprt %p\n", xprt);
|
||||||
rpc_wake_up_queued_task(&xprt->pending, xprt->snd_task);
|
rpc_wake_up_queued_task_on_wq(xprtiod_workqueue,
|
||||||
|
&xprt->pending, xprt->snd_task);
|
||||||
}
|
}
|
||||||
spin_unlock_bh(&xprt->transport_lock);
|
spin_unlock_bh(&xprt->transport_lock);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue