[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