All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] small fix of block job
@ 2016-06-22  9:16 Changlong Xie
  2016-06-22  9:16 ` [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob Changlong Xie
  2016-06-22  9:16 ` [Qemu-devel] [PATCH 2/2] mirror: fix misleading comments Changlong Xie
  0 siblings, 2 replies; 10+ messages in thread
From: Changlong Xie @ 2016-06-22  9:16 UTC (permalink / raw)
  To: qemu devel, Jeff Cody
  Cc: Stefan Hajnoczi, Fam Zheng, Max Reitz, Kevin Wolf, Wen Congyang,
	Changlong Xie

Changlong Xie (2):
  blockjob: assert(cb) in the entry functions of blockjob
  mirror: fix misleading comments

 block/commit.c | 1 +
 block/mirror.c | 4 +++-
 block/stream.c | 1 +
 3 files changed, 5 insertions(+), 1 deletion(-)

-- 
1.9.3

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob
  2016-06-22  9:16 [Qemu-devel] [PATCH 0/2] small fix of block job Changlong Xie
@ 2016-06-22  9:16 ` Changlong Xie
  2016-06-22  9:50   ` Paolo Bonzini
  2016-06-22  9:16 ` [Qemu-devel] [PATCH 2/2] mirror: fix misleading comments Changlong Xie
  1 sibling, 1 reply; 10+ messages in thread
From: Changlong Xie @ 2016-06-22  9:16 UTC (permalink / raw)
  To: qemu devel, Jeff Cody
  Cc: Stefan Hajnoczi, Fam Zheng, Max Reitz, Kevin Wolf, Wen Congyang,
	Changlong Xie

Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
---
 block/commit.c | 1 +
 block/mirror.c | 2 ++
 block/stream.c | 1 +
 3 files changed, 4 insertions(+)

diff --git a/block/commit.c b/block/commit.c
index 444333b..13b55c1 100644
--- a/block/commit.c
+++ b/block/commit.c
@@ -223,6 +223,7 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base,
     BlockDriverState *overlay_bs;
     Error *local_err = NULL;
 
+    assert(cb);
     assert(top != bs);
     if (top == base) {
         error_setg(errp, "Invalid files for merge: top and base are the same");
diff --git a/block/mirror.c b/block/mirror.c
index a04ed9c..fa2bdab 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -912,6 +912,7 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target,
     bool is_none_mode;
     BlockDriverState *base;
 
+    assert(cb);
     if (mode == MIRROR_SYNC_MODE_INCREMENTAL) {
         error_setg(errp, "Sync mode 'incremental' not supported");
         return;
@@ -935,6 +936,7 @@ void commit_active_start(BlockDriverState *bs, BlockDriverState *base,
     int ret;
     Error *local_err = NULL;
 
+    assert(cb);
     orig_base_flags = bdrv_get_flags(base);
 
     if (bdrv_reopen(base, bs->open_flags, errp)) {
diff --git a/block/stream.c b/block/stream.c
index c0efbda..fc34c63 100644
--- a/block/stream.c
+++ b/block/stream.c
@@ -226,6 +226,7 @@ void stream_start(BlockDriverState *bs, BlockDriverState *base,
 {
     StreamBlockJob *s;
 
+    assert(cb);
     s = block_job_create(&stream_job_driver, bs, speed, cb, opaque, errp);
     if (!s) {
         return;
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH 2/2] mirror: fix misleading comments
  2016-06-22  9:16 [Qemu-devel] [PATCH 0/2] small fix of block job Changlong Xie
  2016-06-22  9:16 ` [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob Changlong Xie
@ 2016-06-22  9:16 ` Changlong Xie
  1 sibling, 0 replies; 10+ messages in thread
From: Changlong Xie @ 2016-06-22  9:16 UTC (permalink / raw)
  To: qemu devel, Jeff Cody
  Cc: Stefan Hajnoczi, Fam Zheng, Max Reitz, Kevin Wolf, Wen Congyang,
	Changlong Xie

s/target bs/to_replace/, also we check to_replace bs is not
blocked in qmp_drive_mirror() not here

Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
---
 block/mirror.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/mirror.c b/block/mirror.c
index fa2bdab..335ddd2 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -769,7 +769,7 @@ static void mirror_complete(BlockJob *job, Error **errp)
         }
     }
 
-    /* check the target bs is not blocked and block all operations on it */
+    /* block all operations on to_replace bs */
     if (s->replaces) {
         AioContext *replace_aio_context;
 
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob
  2016-06-22  9:16 ` [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob Changlong Xie
@ 2016-06-22  9:50   ` Paolo Bonzini
  2016-06-22 10:12     ` Changlong Xie
  0 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2016-06-22  9:50 UTC (permalink / raw)
  To: Changlong Xie, qemu devel, Jeff Cody
  Cc: Kevin Wolf, Fam Zheng, Max Reitz, Stefan Hajnoczi



On 22/06/2016 11:16, Changlong Xie wrote:
> Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
> ---
>  block/commit.c | 1 +
>  block/mirror.c | 2 ++
>  block/stream.c | 1 +
>  3 files changed, 4 insertions(+)

Why is this useful?

Paolo

> diff --git a/block/commit.c b/block/commit.c
> index 444333b..13b55c1 100644
> --- a/block/commit.c
> +++ b/block/commit.c
> @@ -223,6 +223,7 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base,
>      BlockDriverState *overlay_bs;
>      Error *local_err = NULL;
>  
> +    assert(cb);
>      assert(top != bs);
>      if (top == base) {
>          error_setg(errp, "Invalid files for merge: top and base are the same");
> diff --git a/block/mirror.c b/block/mirror.c
> index a04ed9c..fa2bdab 100644
> --- a/block/mirror.c
> +++ b/block/mirror.c
> @@ -912,6 +912,7 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target,
>      bool is_none_mode;
>      BlockDriverState *base;
>  
> +    assert(cb);
>      if (mode == MIRROR_SYNC_MODE_INCREMENTAL) {
>          error_setg(errp, "Sync mode 'incremental' not supported");
>          return;
> @@ -935,6 +936,7 @@ void commit_active_start(BlockDriverState *bs, BlockDriverState *base,
>      int ret;
>      Error *local_err = NULL;
>  
> +    assert(cb);
>      orig_base_flags = bdrv_get_flags(base);
>  
>      if (bdrv_reopen(base, bs->open_flags, errp)) {
> diff --git a/block/stream.c b/block/stream.c
> index c0efbda..fc34c63 100644
> --- a/block/stream.c
> +++ b/block/stream.c
> @@ -226,6 +226,7 @@ void stream_start(BlockDriverState *bs, BlockDriverState *base,
>  {
>      StreamBlockJob *s;
>  
> +    assert(cb);
>      s = block_job_create(&stream_job_driver, bs, speed, cb, opaque, errp);
>      if (!s) {
>          return;
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob
  2016-06-22  9:50   ` Paolo Bonzini
@ 2016-06-22 10:12     ` Changlong Xie
  2016-06-22 10:19       ` Paolo Bonzini
  0 siblings, 1 reply; 10+ messages in thread
From: Changlong Xie @ 2016-06-22 10:12 UTC (permalink / raw)
  To: Paolo Bonzini, qemu devel, Jeff Cody
  Cc: Kevin Wolf, Fam Zheng, Max Reitz, Stefan Hajnoczi

On 06/22/2016 05:50 PM, Paolo Bonzini wrote:
>
>
> On 22/06/2016 11:16, Changlong Xie wrote:
>> Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
>> ---
>>   block/commit.c | 1 +
>>   block/mirror.c | 2 ++
>>   block/stream.c | 1 +
>>   3 files changed, 4 insertions(+)
>
> Why is this useful?
>

commit/mirror/stream/backup use block_job_create(..., cb,..) to create 
relevant blockjob. When they finished, these jobs will invoke 
block_job_completed, then invoke job->cb() unconditionally. So i think
we need this to avoid segment fault. Actually backup has implemented this.

Thanks
	-Xie

> Paolo
>
>> diff --git a/block/commit.c b/block/commit.c
>> index 444333b..13b55c1 100644
>> --- a/block/commit.c
>> +++ b/block/commit.c
>> @@ -223,6 +223,7 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base,
>>       BlockDriverState *overlay_bs;
>>       Error *local_err = NULL;
>>
>> +    assert(cb);
>>       assert(top != bs);
>>       if (top == base) {
>>           error_setg(errp, "Invalid files for merge: top and base are the same");
>> diff --git a/block/mirror.c b/block/mirror.c
>> index a04ed9c..fa2bdab 100644
>> --- a/block/mirror.c
>> +++ b/block/mirror.c
>> @@ -912,6 +912,7 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target,
>>       bool is_none_mode;
>>       BlockDriverState *base;
>>
>> +    assert(cb);
>>       if (mode == MIRROR_SYNC_MODE_INCREMENTAL) {
>>           error_setg(errp, "Sync mode 'incremental' not supported");
>>           return;
>> @@ -935,6 +936,7 @@ void commit_active_start(BlockDriverState *bs, BlockDriverState *base,
>>       int ret;
>>       Error *local_err = NULL;
>>
>> +    assert(cb);
>>       orig_base_flags = bdrv_get_flags(base);
>>
>>       if (bdrv_reopen(base, bs->open_flags, errp)) {
>> diff --git a/block/stream.c b/block/stream.c
>> index c0efbda..fc34c63 100644
>> --- a/block/stream.c
>> +++ b/block/stream.c
>> @@ -226,6 +226,7 @@ void stream_start(BlockDriverState *bs, BlockDriverState *base,
>>   {
>>       StreamBlockJob *s;
>>
>> +    assert(cb);
>>       s = block_job_create(&stream_job_driver, bs, speed, cb, opaque, errp);
>>       if (!s) {
>>           return;
>>
>
>
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob
  2016-06-22 10:12     ` Changlong Xie
@ 2016-06-22 10:19       ` Paolo Bonzini
  2016-06-22 17:31         ` Eric Blake
  0 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2016-06-22 10:19 UTC (permalink / raw)
  To: Changlong Xie, qemu devel, Jeff Cody
  Cc: Kevin Wolf, Fam Zheng, Max Reitz, Stefan Hajnoczi



On 22/06/2016 12:12, Changlong Xie wrote:
> 
> commit/mirror/stream/backup use block_job_create(..., cb,..) to create
> relevant blockjob. When they finished, these jobs will invoke
> block_job_completed, then invoke job->cb() unconditionally. So i think
> we need this to avoid segment fault. Actually backup has implemented this.

So this suggests that the right place to put the assertion would be
block_job_create.  But it's even better to add a

#define QEMU_NONNULL __attribute__((__nonnull__))

to include/qemu/compiler.h and declare the arguments as non-null.

Paolo

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob
  2016-06-22 10:19       ` Paolo Bonzini
@ 2016-06-22 17:31         ` Eric Blake
  2016-06-23  1:04           ` Changlong Xie
  0 siblings, 1 reply; 10+ messages in thread
From: Eric Blake @ 2016-06-22 17:31 UTC (permalink / raw)
  To: Paolo Bonzini, Changlong Xie, qemu devel, Jeff Cody
  Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Max Reitz

[-- Attachment #1: Type: text/plain, Size: 936 bytes --]

On 06/22/2016 04:19 AM, Paolo Bonzini wrote:
> 
> 
> On 22/06/2016 12:12, Changlong Xie wrote:
>>
>> commit/mirror/stream/backup use block_job_create(..., cb,..) to create
>> relevant blockjob. When they finished, these jobs will invoke
>> block_job_completed, then invoke job->cb() unconditionally. So i think
>> we need this to avoid segment fault. Actually backup has implemented this.
> 
> So this suggests that the right place to put the assertion would be
> block_job_create.  But it's even better to add a
> 
> #define QEMU_NONNULL __attribute__((__nonnull__))
> 
> to include/qemu/compiler.h and declare the arguments as non-null.

Or alternatively fix things to only invoke job->cb() if it is non-NULL,
so that callers don't have to pass in a no-op callback just to appease a
non-NULL attribute.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob
  2016-06-22 17:31         ` Eric Blake
@ 2016-06-23  1:04           ` Changlong Xie
  2016-06-23  6:21             ` Kevin Wolf
  0 siblings, 1 reply; 10+ messages in thread
From: Changlong Xie @ 2016-06-23  1:04 UTC (permalink / raw)
  To: Eric Blake, Paolo Bonzini, qemu devel, Jeff Cody
  Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Max Reitz

On 06/23/2016 01:31 AM, Eric Blake wrote:
> On 06/22/2016 04:19 AM, Paolo Bonzini wrote:
>>
>>
>> On 22/06/2016 12:12, Changlong Xie wrote:
>>>
>>> commit/mirror/stream/backup use block_job_create(..., cb,..) to create
>>> relevant blockjob. When they finished, these jobs will invoke
>>> block_job_completed, then invoke job->cb() unconditionally. So i think
>>> we need this to avoid segment fault. Actually backup has implemented this.
>>
>> So this suggests that the right place to put the assertion would be
>> block_job_create.  But it's even better to add a
>>
>> #define QEMU_NONNULL __attribute__((__nonnull__))
>>
>> to include/qemu/compiler.h and declare the arguments as non-null.
>
> Or alternatively fix things to only invoke job->cb() if it is non-NULL,
> so that callers don't have to pass in a no-op callback just to appease a
> non-NULL attribute.
>

Is there any reason, that we should invoke job->cb() unconditionally 
without nonnull check? There is no relevant clue in the historical 
commit messages. If yes, i prefer paolo's suggestion; otherwise eric's 
solution is better.

Thanks
	-Xie

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob
  2016-06-23  1:04           ` Changlong Xie
@ 2016-06-23  6:21             ` Kevin Wolf
  2016-06-23  6:57               ` Changlong Xie
  0 siblings, 1 reply; 10+ messages in thread
From: Kevin Wolf @ 2016-06-23  6:21 UTC (permalink / raw)
  To: Changlong Xie
  Cc: Eric Blake, Paolo Bonzini, qemu devel, Jeff Cody, Fam Zheng,
	Stefan Hajnoczi, Max Reitz

Am 23.06.2016 um 03:04 hat Changlong Xie geschrieben:
> On 06/23/2016 01:31 AM, Eric Blake wrote:
> >On 06/22/2016 04:19 AM, Paolo Bonzini wrote:
> >>
> >>
> >>On 22/06/2016 12:12, Changlong Xie wrote:
> >>>
> >>>commit/mirror/stream/backup use block_job_create(..., cb,..) to create
> >>>relevant blockjob. When they finished, these jobs will invoke
> >>>block_job_completed, then invoke job->cb() unconditionally. So i think
> >>>we need this to avoid segment fault. Actually backup has implemented this.
> >>
> >>So this suggests that the right place to put the assertion would be
> >>block_job_create.  But it's even better to add a
> >>
> >>#define QEMU_NONNULL __attribute__((__nonnull__))
> >>
> >>to include/qemu/compiler.h and declare the arguments as non-null.
> >
> >Or alternatively fix things to only invoke job->cb() if it is non-NULL,
> >so that callers don't have to pass in a no-op callback just to appease a
> >non-NULL attribute.
> 
> Is there any reason, that we should invoke job->cb() unconditionally
> without nonnull check? There is no relevant clue in the historical
> commit messages. If yes, i prefer paolo's suggestion; otherwise
> eric's solution is better.

I don't think no-op callbacks actually exist for jobs.

Kevin

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob
  2016-06-23  6:21             ` Kevin Wolf
@ 2016-06-23  6:57               ` Changlong Xie
  0 siblings, 0 replies; 10+ messages in thread
From: Changlong Xie @ 2016-06-23  6:57 UTC (permalink / raw)
  To: Kevin Wolf
  Cc: Eric Blake, Paolo Bonzini, qemu devel, Jeff Cody, Fam Zheng,
	Stefan Hajnoczi, Max Reitz

On 06/23/2016 02:21 PM, Kevin Wolf wrote:
> Am 23.06.2016 um 03:04 hat Changlong Xie geschrieben:
>> On 06/23/2016 01:31 AM, Eric Blake wrote:
>>> On 06/22/2016 04:19 AM, Paolo Bonzini wrote:
>>>>
>>>>
>>>> On 22/06/2016 12:12, Changlong Xie wrote:
>>>>>
>>>>> commit/mirror/stream/backup use block_job_create(..., cb,..) to create
>>>>> relevant blockjob. When they finished, these jobs will invoke
>>>>> block_job_completed, then invoke job->cb() unconditionally. So i think
>>>>> we need this to avoid segment fault. Actually backup has implemented this.
>>>>
>>>> So this suggests that the right place to put the assertion would be
>>>> block_job_create.  But it's even better to add a
>>>>
>>>> #define QEMU_NONNULL __attribute__((__nonnull__))
>>>>
>>>> to include/qemu/compiler.h and declare the arguments as non-null.
>>>
>>> Or alternatively fix things to only invoke job->cb() if it is non-NULL,
>>> so that callers don't have to pass in a no-op callback just to appease a
>>> non-NULL attribute.
>>
>> Is there any reason, that we should invoke job->cb() unconditionally
>> without nonnull check? There is no relevant clue in the historical
>> commit messages. If yes, i prefer paolo's suggestion; otherwise
>> eric's solution is better.
>
> I don't think no-op callbacks actually exist for jobs.
>

So, i'll put assert(cb) in block_job_create as Paolo suggested.

Thanks
	-Xie

> Kevin
>
>
> .
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2016-06-23  6:53 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-22  9:16 [Qemu-devel] [PATCH 0/2] small fix of block job Changlong Xie
2016-06-22  9:16 ` [Qemu-devel] [PATCH 1/2] blockjob: assert(cb) in the entry functions of blockjob Changlong Xie
2016-06-22  9:50   ` Paolo Bonzini
2016-06-22 10:12     ` Changlong Xie
2016-06-22 10:19       ` Paolo Bonzini
2016-06-22 17:31         ` Eric Blake
2016-06-23  1:04           ` Changlong Xie
2016-06-23  6:21             ` Kevin Wolf
2016-06-23  6:57               ` Changlong Xie
2016-06-22  9:16 ` [Qemu-devel] [PATCH 2/2] mirror: fix misleading comments Changlong Xie

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.