On 11/18/20 12:04 PM, Vladimir Sementsov-Ogievskiy wrote: > To be used in mirror in the following commit to cancel in-flight io on > target to not waste the time. > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> > --- > include/qemu/job.h | 5 +++++ > job.c | 3 +++ > 2 files changed, 8 insertions(+) > > diff --git a/include/qemu/job.h b/include/qemu/job.h > index 32aabb1c60..efc6fa7544 100644 > --- a/include/qemu/job.h > +++ b/include/qemu/job.h > @@ -251,6 +251,11 @@ struct JobDriver { > */ > void (*clean)(Job *job); > > + /** > + * If the callback is not NULL, it will be invoked in job_cancel_async > + */ > + void (*cancel)(Job *job); > +
Does the call need to be re-entrant or even worry about being invoked more than once on the same BDS? Or worded differently, > +++ b/job.c > @@ -712,6 +712,9 @@ static int job_finalize_single(Job *job) > > static void job_cancel_async(Job *job, bool force) > { > + if (job->driver->cancel) { > + job->driver->cancel(job); > + } > if (job->user_paused) { can job_cancel_async be reached more than once on the same BDS? > /* Do not call job_enter here, the caller will handle it. */ > if (job->driver->user_resume) { > -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org