qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Emanuele Giuseppe Esposito <eesposit@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
	qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>, John Snow <jsnow@redhat.com>
Subject: Re: [PATCH v2 4/5] progressmeter: protect with a mutex
Date: Tue, 18 May 2021 12:14:17 +0200	[thread overview]
Message-ID: <b0de7a46-5abc-3aef-adcb-438474274436@redhat.com> (raw)
In-Reply-To: <60139fc9-4856-1dfa-222d-08267cb89c27@virtuozzo.com>



On 18/05/2021 12:00, Vladimir Sementsov-Ogievskiy wrote:
> 18.05.2021 12:40, Emanuele Giuseppe Esposito wrote:
>> Progressmeter is protected by the AioContext mutex, which
>> is taken by the block jobs and their caller (like blockdev).
>>
>> We would like to remove the dependency of block layer code on the
>> AioContext mutex, since most drivers and the core I/O code are already
>> not relying on it.
>>
>> Create a new C file to implement the ProgressMeter API, but keep the
>> struct as public, to avoid forcing allocation on the heap.
>>
>> Also add a mutex to be able to provide an accurate snapshot of the
>> progress values to the caller.
>>
>> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> 
> patch changed a lot, so you can't keep Stefan's r-b. r-b should be kept 
> if patch is unchanged.

Sorry, my bad. Will remove it, if we keep these changes (see below).

> 
> 
>> Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
>> ---
>>   block/meson.build             |  1 +
>>   block/progress_meter.c        | 64 +++++++++++++++++++++++++++++++++++
>>   blockjob.c                    | 33 +++++++++++++-----
>>   include/qemu/progress_meter.h | 34 +++++++++++--------
>>   job-qmp.c                     |  8 +++--
>>   job.c                         |  3 ++
>>   qemu-img.c                    |  9 +++--
>>   7 files changed, 124 insertions(+), 28 deletions(-)
>>   create mode 100644 block/progress_meter.c
>>
>> diff --git a/block/meson.build b/block/meson.build
>> index d21990ec95..90efd21ecf 100644
>> --- a/block/meson.build
>> +++ b/block/meson.build
>> @@ -13,6 +13,7 @@ block_ss.add(files(
>>     'commit.c',
>>     'copy-on-read.c',
>>     'preallocate.c',
>> +  'progress_meter.c',
>>     'create.c',
>>     'crypto.c',
>>     'dirty-bitmap.c',
>> diff --git a/block/progress_meter.c b/block/progress_meter.c
>> new file mode 100644
>> index 0000000000..aa2e60248c
>> --- /dev/null
>> +++ b/block/progress_meter.c
>> @@ -0,0 +1,64 @@
>> +/*
[...]>
> That's not what I meant.

I know it's not what you meant. But since Paolo also pointed out that it 
would be better to avoid heap allocations, I went for something in 
between :) In the end it doesn't look so bad to have a separate .c file.

  If we move only function to c file, this
> doesn't make real sense. If we want encapsulation, we should move the 
> structure definition itself to the c file too. Than, you'll need _new / 
> _free functions instead of _init / _destroy, because we'll move to heap 
> allocation for progress meter. Also, if we go this way, please make at 
> least two patches:
> 
> 1. move progress meter (functions and structure) to own c file, modify 
> meson.build
> 
> 2. add thread-safety

Let's see how this goes, and then if we keep the .c file I will split 
the patches. But I guess this requires a v3 anyways.

Emanuele



  reply	other threads:[~2021-05-18 10:54 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-18  9:40 [PATCH v2 0/5] block-copy: make helper APIs thread safe Emanuele Giuseppe Esposito
2021-05-18  9:40 ` [PATCH v2 1/5] ratelimit: treat zero speed as unlimited Emanuele Giuseppe Esposito
2021-05-18  9:40 ` [PATCH v2 2/5] block-copy: let ratelimit handle a speed of 0 Emanuele Giuseppe Esposito
2021-05-18  9:40 ` [PATCH v2 3/5] blockjob: " Emanuele Giuseppe Esposito
2021-05-18  9:40 ` [PATCH v2 4/5] progressmeter: protect with a mutex Emanuele Giuseppe Esposito
2021-05-18 10:00   ` Vladimir Sementsov-Ogievskiy
2021-05-18 10:14     ` Emanuele Giuseppe Esposito [this message]
2021-05-31 14:24       ` Stefan Hajnoczi
2021-05-18  9:40 ` [PATCH v2 5/5] co-shared-resource: " Emanuele Giuseppe Esposito
2021-05-18 14:50   ` Vladimir Sementsov-Ogievskiy

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=b0de7a46-5abc-3aef-adcb-438474274436@redhat.com \
    --to=eesposit@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).