All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hanna Reitz <hreitz@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
	Max Reitz <mreitz@redhat.com>,
	qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [PATCH for-6.2 v3 05/12] job: @force parameter for job_cancel_sync{,_all}()
Date: Wed, 1 Sep 2021 14:49:22 +0200	[thread overview]
Message-ID: <b42ad82f-7292-96b8-775f-5422a9df78eb@redhat.com> (raw)
In-Reply-To: <efd845f6-e62a-88a1-2ef7-0960714ba63d@virtuozzo.com>

On 01.09.21 12:20, Vladimir Sementsov-Ogievskiy wrote:
> 06.08.2021 12:38, Max Reitz wrote:
>> Callers should be able to specify whether they want job_cancel_sync() to
>> force-cancel the job or not.
>>
>> In fact, almost all invocations do not care about consistency of the
>> result and just want the job to terminate as soon as possible, so they
>> should pass force=true.  The replication block driver is the exception.
>>
>> This changes some iotest outputs, because quitting qemu while a mirror
>> job is active will now lead to it being cancelled instead of completed,
>> which is what we want.  (Cancelling a READY mirror job with force=false
>> may take an indefinite amount of time, which we do not want when
>> quitting.  If users want consistent results, they must have all jobs be
>> done before they quit qemu.)
>>
>> Buglink:https://gitlab.com/qemu-project/qemu/-/issues/462
>> Signed-off-by: Max Reitz<mreitz@redhat.com>
>> ---
>>   include/qemu/job.h                    | 10 ++---
>>   block/replication.c                   |  4 +-
>>   blockdev.c                            |  4 +-
>>   job.c                                 | 20 +++++++--
>>   qemu-nbd.c                            |  2 +-
>>   softmmu/runstate.c                    |  2 +-
>>   storage-daemon/qemu-storage-daemon.c  |  2 +-
>>   tests/unit/test-block-iothread.c      |  2 +-
>>   tests/unit/test-blockjob.c            |  2 +-
>>   tests/qemu-iotests/109.out            | 60 +++++++++++----------------
>>   tests/qemu-iotests/tests/qsd-jobs.out |  2 +-
>>   11 files changed, 55 insertions(+), 55 deletions(-)
>>
>> diff --git a/include/qemu/job.h b/include/qemu/job.h
>> index 41162ed494..5e8edbc2c8 100644
>> --- a/include/qemu/job.h
>> +++ b/include/qemu/job.h
>> @@ -506,19 +506,19 @@ void job_user_cancel(Job *job, bool force, 
>> Error **errp);
>>     /**
>>    * Synchronously cancel the @job.  The completion callback is called
>> - * before the function returns.  The job may actually complete
>> - * instead of canceling itself; the circumstances under which this
>> - * happens depend on the kind of job that is active.
>> + * before the function returns.  If @force is false, the job may
>> + * actually complete instead of canceling itself; the circumstances
>> + * under which this happens depend on the kind of job that is active.
>>    *
>>    * Returns the return value from the job if the job actually completed
>>    * during the call, or -ECANCELED if it was canceled.
>>    *
>>    * Callers must hold the AioContext lock of job->aio_context.
>>    */
>> -int job_cancel_sync(Job *job);
>> +int job_cancel_sync(Job *job, bool force);
>>     /** Synchronously cancels all jobs using job_cancel_sync(). */
>> -void job_cancel_sync_all(void);
>> +void job_cancel_sync_all(bool force);
>
> I think it would be better to keep job_cancel_sync_all(void) prototype 
> and just change its behavior to do force-cancel. Anyway, this patch 
> always pass true to it. And it would be strange to do soft-cancel-all, 
> keeping in mind that soft cancelling only make sense for mirror in 
> ready state.

Actually, yes, that’s true.  I’ll drop the parameter.

Hanna



  reply	other threads:[~2021-09-01 12:54 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-06  9:38 [PATCH for-6.2 v3 00/12] mirror: Handle errors after READY cancel Max Reitz
2021-08-06  9:38 ` [PATCH for-6.2 v3 01/12] job: Context changes in job_completed_txn_abort() Max Reitz
2021-08-06 19:16   ` Eric Blake
2021-08-09 10:04     ` Max Reitz
2021-09-01 10:05   ` Vladimir Sementsov-Ogievskiy
2021-09-01 12:47     ` Hanna Reitz
2021-08-06  9:38 ` [PATCH for-6.2 v3 02/12] mirror: Keep s->synced on error Max Reitz
2021-08-06  9:38 ` [PATCH for-6.2 v3 03/12] mirror: Drop s->synced Max Reitz
2021-08-06  9:38 ` [PATCH for-6.2 v3 04/12] job: Force-cancel jobs in a failed transaction Max Reitz
2021-08-06 19:22   ` Eric Blake
2021-09-01 10:08   ` Vladimir Sementsov-Ogievskiy
2021-08-06  9:38 ` [PATCH for-6.2 v3 05/12] job: @force parameter for job_cancel_sync{, _all}() Max Reitz
2021-08-06 19:39   ` Eric Blake
2021-08-09 10:09     ` Max Reitz
2021-09-01 10:20   ` [PATCH for-6.2 v3 05/12] job: @force parameter for job_cancel_sync{,_all}() Vladimir Sementsov-Ogievskiy
2021-09-01 12:49     ` Hanna Reitz [this message]
2021-09-01 11:04   ` Vladimir Sementsov-Ogievskiy
2021-09-01 12:50     ` Hanna Reitz
2021-08-06  9:38 ` [PATCH for-6.2 v3 06/12] jobs: Give Job.force_cancel more meaning Max Reitz
2021-08-06  9:38 ` [PATCH for-6.2 v3 07/12] job: Add job_cancel_requested() Max Reitz
2021-08-06 20:34   ` Eric Blake
2021-09-01 11:44   ` Vladimir Sementsov-Ogievskiy
2021-08-06  9:38 ` [PATCH for-6.2 v3 08/12] mirror: Use job_is_cancelled() Max Reitz
2021-08-06 20:35   ` Eric Blake
2021-09-01 11:45   ` Vladimir Sementsov-Ogievskiy
2021-08-06  9:38 ` [PATCH for-6.2 v3 09/12] mirror: Check job_is_cancelled() earlier Max Reitz
2021-08-06 20:36   ` Eric Blake
2021-09-01 12:11   ` Vladimir Sementsov-Ogievskiy
2021-08-06  9:38 ` [PATCH for-6.2 v3 10/12] mirror: Stop active mirroring after force-cancel Max Reitz
2021-08-06 20:37   ` Eric Blake
2021-09-01 12:16   ` Vladimir Sementsov-Ogievskiy
2021-08-06  9:38 ` [PATCH for-6.2 v3 11/12] mirror: Do not clear .cancelled Max Reitz
2021-08-06 20:42   ` Eric Blake
2021-09-01 12:22   ` Vladimir Sementsov-Ogievskiy
2021-08-06  9:38 ` [PATCH for-6.2 v3 12/12] iotests: Add mirror-ready-cancel-error test Max Reitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b42ad82f-7292-96b8-775f-5422a9df78eb@redhat.com \
    --to=hreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=vsementsov@virtuozzo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.