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.
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel