diff options
Diffstat (limited to 'block_int.h')
-rw-r--r-- | block_int.h | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/block_int.h b/block_int.h index fbbc7aeb1a..3bf23670b7 100644 --- a/block_int.h +++ b/block_int.h @@ -97,18 +97,15 @@ struct BlockJob { /** * Set to true if the job should cancel itself. The flag must * always be tested just before toggling the busy flag from false - * to true. After a job has detected that the cancelled flag is - * true, it should not anymore issue any I/O operation to the - * block device. + * to true. After a job has been cancelled, it should only yield + * if #qemu_aio_wait will ("sooner or later") reenter the coroutine. */ bool cancelled; /** * Set to false by the job while it is in a quiescent state, where - * no I/O is pending and cancellation can be processed without - * issuing new I/O. The busy flag must be set to false when the - * job goes to sleep on any condition that is not detected by - * #qemu_aio_wait, such as a timer. + * no I/O is pending and the job has yielded on any condition + * that is not detected by #qemu_aio_wait, such as a timer. */ bool busy; @@ -364,6 +361,17 @@ void *block_job_create(const BlockJobType *job_type, BlockDriverState *bs, void *opaque, Error **errp); /** + * block_job_sleep_ns: + * @job: The job that calls the function. + * @clock: The clock to sleep on. + * @ns: How many nanoseconds to stop for. + * + * Put the job to sleep (assuming that it wasn't canceled) for @ns + * nanoseconds. Canceling the job will interrupt the wait immediately. + */ +void block_job_sleep_ns(BlockJob *job, QEMUClock *clock, int64_t ns); + +/** * block_job_complete: * @job: The job being completed. * @ret: The status code. |