Fast path results in rcu lockups and hangs. The reason is that we got called from fs, then we try to re-enter the fs but fs is not ready for this.
There is an idea to investigate - try to skip dispatcher thread and directly execute in a runner thread. Signed-off-by: Alexander Atanasov <alexander.atana...@virtuozzo.com> --- drivers/md/dm-ploop-map.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/md/dm-ploop-map.c b/drivers/md/dm-ploop-map.c index 6e4d6f862135..4c3c5339b7d3 100644 --- a/drivers/md/dm-ploop-map.c +++ b/drivers/md/dm-ploop-map.c @@ -2297,8 +2297,14 @@ static void ploop_submit_embedded_pio(struct ploop *ploop, struct pio *pio) } ploop_prepare_one_embedded_pio(ploop, pio, &deferred_pios); - /* check if result is a single pio , so we can try fast path */ - if (deferred_pios.first && deferred_pios.first->next == NULL) { + /* + * Disable fast path due to rcu lockups fs -> ploop -> fs - fses are not reentrant + * we can however try another fast path skip dispatcher thread and pass directly to + * runners + */ +#define ENABLE_FAST_PATH 0 + /* check if result is a single pio, if so we can try fast path */ + if (ENABLE_FAST_PATH && deferred_pios.first && deferred_pios.first->next == NULL) { spio = list_entry((struct list_head *)deferred_pios.first, typeof(*spio), list); INIT_LIST_HEAD(&spio->list); if (req_op(rq) == REQ_OP_READ) { -- 2.43.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel