[Devel] [PATCH vz9 v1 38/63] dm-ploop: introduce pio runner threads
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Fri Feb 7 12:50:44 MSK 2025
On 1/24/25 23:36, Alexander Atanasov wrote:
> +int ploop_worker(void *data)
> +{
> + struct ploop_worker *worker = data;
> + struct ploop *ploop = worker->ploop;
> +
> + for (;;) {
> + set_current_state(TASK_INTERRUPTIBLE);
> +
> if (llist_empty(&ploop->pios[PLOOP_LIST_FLUSH]) &&
> - llist_empty(&ploop->pios[PLOOP_LIST_PREPARE]) &&
> - llist_empty(&ploop->pios[PLOOP_LIST_DEFERRED]) &&
> - llist_empty(&ploop->pios[PLOOP_LIST_DISCARD]) &&
> - llist_empty(&ploop->pios[PLOOP_LIST_COW]) &&
> - llist_empty(&ploop->llresubmit_pios)
> - )
> + llist_empty(&ploop->pios[PLOOP_LIST_PREPARE]) &&
> + llist_empty(&ploop->pios[PLOOP_LIST_DEFERRED]) &&
> + llist_empty(&ploop->pios[PLOOP_LIST_DISCARD]) &&
> + llist_empty(&ploop->pios[PLOOP_LIST_COW]) &&
> + llist_empty(&ploop->llresubmit_pios) &&
> + !ploop->force_md_writeback) {
> + if (kthread_should_stop()) {
> + wait_event_interruptible(ploop->dispatcher_wq_data,
> + (!ploop_runners_have_pending(ploop)));
nit: excess parenthesis in the second argument
> + __set_current_state(TASK_RUNNING);
> + break;
> + }
> schedule();
> + /* now check for pending work */
> + }
>
> __set_current_state(TASK_RUNNING);
> do_ploop_run_work(ploop);
> - cond_resched();
> + cond_resched(); /* give other processes chance to run */
> + if (kthread_should_stop()) {
> + wait_event_interruptible(ploop->dispatcher_wq_data,
> + (!ploop_runners_have_pending(ploop)));
same
> + __set_current_state(TASK_RUNNING);
> + break;
> + }
> }
> return 0;
> }
--
Best regards, Tikhomirov Pavel
Senior Software Developer, Virtuozzo.
More information about the Devel
mailing list