diff mbox series

[v3,32/33] block: Pass BdrvChildRole in remaining cases

Message ID 20200218124242.584644-33-mreitz@redhat.com
State New
Headers show
Series block: Introduce real BdrvChildRole | expand

Commit Message

Max Reitz Feb. 18, 2020, 12:42 p.m. UTC
These calls have no real use for the child role yet, but it will not
harm to give one.

Notably, the bdrv_root_attach_child() call in blockjob.c is left
unmodified because there is not much the generic BlockJob object wants
from its children.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
---
 block/block-backend.c | 11 +++++++----
 block/vvfat.c         |  2 +-
 2 files changed, 8 insertions(+), 5 deletions(-)

Comments

Kevin Wolf May 6, 2020, 5:13 p.m. UTC | #1
Am 18.02.2020 um 13:42 hat Max Reitz geschrieben:
> These calls have no real use for the child role yet, but it will not
> harm to give one.
> 
> Notably, the bdrv_root_attach_child() call in blockjob.c is left
> unmodified because there is not much the generic BlockJob object wants
> from its children.
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> Reviewed-by: Eric Blake <eblake@redhat.com>

> diff --git a/block/vvfat.c b/block/vvfat.c
> index 8f4ff5a97e..d4f4218924 100644
> --- a/block/vvfat.c
> +++ b/block/vvfat.c
> @@ -3186,7 +3186,7 @@ static int enable_write_target(BlockDriverState *bs, Error **errp)
>      options = qdict_new();
>      qdict_put_str(options, "write-target.driver", "qcow");
>      s->qcow = bdrv_open_child(s->qcow_filename, options, "write-target", bs,
> -                              &child_vvfat_qcow, 0, false, errp);
> +                              &child_vvfat_qcow, BDRV_CHILD_DATA, false, errp);

Doesn't it contain metadata, too?

Kevin
Max Reitz May 7, 2020, 9:36 a.m. UTC | #2
On 06.05.20 19:13, Kevin Wolf wrote:
> Am 18.02.2020 um 13:42 hat Max Reitz geschrieben:
>> These calls have no real use for the child role yet, but it will not
>> harm to give one.
>>
>> Notably, the bdrv_root_attach_child() call in blockjob.c is left
>> unmodified because there is not much the generic BlockJob object wants
>> from its children.
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> Reviewed-by: Eric Blake <eblake@redhat.com>
> 
>> diff --git a/block/vvfat.c b/block/vvfat.c
>> index 8f4ff5a97e..d4f4218924 100644
>> --- a/block/vvfat.c
>> +++ b/block/vvfat.c
>> @@ -3186,7 +3186,7 @@ static int enable_write_target(BlockDriverState *bs, Error **errp)
>>      options = qdict_new();
>>      qdict_put_str(options, "write-target.driver", "qcow");
>>      s->qcow = bdrv_open_child(s->qcow_filename, options, "write-target", bs,
>> -                              &child_vvfat_qcow, 0, false, errp);
>> +                              &child_vvfat_qcow, BDRV_CHILD_DATA, false, errp);
> 
> Doesn't it contain metadata, too?

Aw, I don’t know...  This is vvfat, I don’t want to know.

Do you mean metadata beyond the filesystem structures?  Are those
structures data or metadata in this context?  Does it even matter?

I suppose I just don’t want to think about all of that, and the simplest
way to do it is to indeed pass METADATA, too.

Max
Kevin Wolf May 7, 2020, 11:40 a.m. UTC | #3
Am 07.05.2020 um 11:36 hat Max Reitz geschrieben:
> On 06.05.20 19:13, Kevin Wolf wrote:
> > Am 18.02.2020 um 13:42 hat Max Reitz geschrieben:
> >> These calls have no real use for the child role yet, but it will not
> >> harm to give one.
> >>
> >> Notably, the bdrv_root_attach_child() call in blockjob.c is left
> >> unmodified because there is not much the generic BlockJob object wants
> >> from its children.
> >>
> >> Signed-off-by: Max Reitz <mreitz@redhat.com>
> >> Reviewed-by: Eric Blake <eblake@redhat.com>
> > 
> >> diff --git a/block/vvfat.c b/block/vvfat.c
> >> index 8f4ff5a97e..d4f4218924 100644
> >> --- a/block/vvfat.c
> >> +++ b/block/vvfat.c
> >> @@ -3186,7 +3186,7 @@ static int enable_write_target(BlockDriverState *bs, Error **errp)
> >>      options = qdict_new();
> >>      qdict_put_str(options, "write-target.driver", "qcow");
> >>      s->qcow = bdrv_open_child(s->qcow_filename, options, "write-target", bs,
> >> -                              &child_vvfat_qcow, 0, false, errp);
> >> +                              &child_vvfat_qcow, BDRV_CHILD_DATA, false, errp);
> > 
> > Doesn't it contain metadata, too?
> 
> Aw, I don’t know...  This is vvfat, I don’t want to know.
> 
> Do you mean metadata beyond the filesystem structures?  Are those
> structures data or metadata in this context?  Does it even matter?

I can't say I understand what the qcow node is even used for in detail.
vvfat checks the allocation status in the qcow node in a few places,
does this count as metadata?

> I suppose I just don’t want to think about all of that, and the simplest
> way to do it is to indeed pass METADATA, too.

Yep, that was my thinking. If we can't decide whether it's just DATA or
also METADATA and want to err on the safe side, setting both should do.

Kevin
diff mbox series

Patch

diff --git a/block/block-backend.c b/block/block-backend.c
index 9e0078bfb5..e655e15675 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -401,8 +401,9 @@  BlockBackend *blk_new_open(const char *filename, const char *reference,
         return NULL;
     }
 
-    blk->root = bdrv_root_attach_child(bs, "root", &child_root, 0, blk->ctx,
-                                       perm, BLK_PERM_ALL, blk, errp);
+    blk->root = bdrv_root_attach_child(bs, "root", &child_root,
+                                       BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY,
+                                       blk->ctx, perm, BLK_PERM_ALL, blk, errp);
     if (!blk->root) {
         blk_unref(blk);
         return NULL;
@@ -812,8 +813,10 @@  int blk_insert_bs(BlockBackend *blk, BlockDriverState *bs, Error **errp)
 {
     ThrottleGroupMember *tgm = &blk->public.throttle_group_member;
     bdrv_ref(bs);
-    blk->root = bdrv_root_attach_child(bs, "root", &child_root, 0, blk->ctx,
-                                       blk->perm, blk->shared_perm, blk, errp);
+    blk->root = bdrv_root_attach_child(bs, "root", &child_root,
+                                       BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY,
+                                       blk->ctx, blk->perm, blk->shared_perm,
+                                       blk, errp);
     if (blk->root == NULL) {
         return -EPERM;
     }
diff --git a/block/vvfat.c b/block/vvfat.c
index 8f4ff5a97e..d4f4218924 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -3186,7 +3186,7 @@  static int enable_write_target(BlockDriverState *bs, Error **errp)
     options = qdict_new();
     qdict_put_str(options, "write-target.driver", "qcow");
     s->qcow = bdrv_open_child(s->qcow_filename, options, "write-target", bs,
-                              &child_vvfat_qcow, 0, false, errp);
+                              &child_vvfat_qcow, BDRV_CHILD_DATA, false, errp);
     qobject_unref(options);
     if (!s->qcow) {
         ret = -EINVAL;