qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 04/11] job: add .cancel handler for the driver


From: Vladimir Sementsov-Ogievskiy
Subject: Re: [PATCH 04/11] job: add .cancel handler for the driver
Date: Thu, 21 Jan 2021 12:32:54 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1

21.01.2021 02:17, Eric Blake wrote:
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 <vsementsov@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?

what do you mean by same BDS? On same job?

I don't think that job_cancel_async should be called several times during one 
"cancel" operation. But if it is, it's still safe enough with only .cancel 
implementation in [05], which just calls bdrv_cancel_in_flight() (which of course should 
be safe to call several times).


          /* Do not call job_enter here, the caller will handle it.  */
          if (job->driver->user_resume) {




--
Best regards,
Vladimir



reply via email to

[Prev in Thread] Current Thread [Next in Thread]