block: Add BlockDriver.is_format
authorMax Reitz <mreitz@redhat.com>
Wed, 13 May 2020 11:05:12 +0000 (13:05 +0200)
committerKevin Wolf <kwolf@redhat.com>
Mon, 18 May 2020 17:05:25 +0000 (19:05 +0200)
We want to unify child_format and child_file at some point.  One of the
important things that set format drivers apart from other drivers is
that they do not expect other format nodes under them (except in the
backing chain), i.e. we must not probe formats inside of formats.  That
means we need something on which to distinguish format drivers from
others, and hence this flag.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Message-Id: <20200513110544.176672-3-mreitz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 files changed:
block/bochs.c
block/cloop.c
block/crypto.c
block/dmg.c
block/parallels.c
block/qcow.c
block/qcow2.c
block/qed.c
block/raw-format.c
block/vdi.c
block/vhdx.c
block/vmdk.c
block/vpc.c
include/block/block_int.h

index 32bb83b268eda764c7ba1889dd4f943e3e4ab5f6..e7bbeaa1c45d27b34fb3de9aeee08dcc3641e0c3 100644 (file)
@@ -301,6 +301,7 @@ static BlockDriver bdrv_bochs = {
     .bdrv_refresh_limits = bochs_refresh_limits,
     .bdrv_co_preadv = bochs_co_preadv,
     .bdrv_close                = bochs_close,
+    .is_format          = true,
 };
 
 static void bdrv_bochs_init(void)
index 4de94876d4f0ed24ca52e9e427ae457bce50fe46..f90f1a4b4c865e9b71f5bbb66b8487197d46c13d 100644 (file)
@@ -297,6 +297,7 @@ static BlockDriver bdrv_cloop = {
     .bdrv_refresh_limits = cloop_refresh_limits,
     .bdrv_co_preadv = cloop_co_preadv,
     .bdrv_close     = cloop_close,
+    .is_format      = true,
 };
 
 static void bdrv_cloop_init(void)
index 6b21d6bf6c01f3ff2d6167013361369ba89a2eec..bdb2b27475d64bfe68d301f589761a9b8de91046 100644 (file)
@@ -771,6 +771,8 @@ static BlockDriver bdrv_crypto_luks = {
     .bdrv_get_info      = block_crypto_get_info_luks,
     .bdrv_get_specific_info = block_crypto_get_specific_info_luks,
 
+    .is_format          = true,
+
     .strong_runtime_opts = block_crypto_strong_runtime_opts,
 };
 
index 4a045f2b3e0fb930db505211951b777b6fd73ee6..ef3c6e771d766f245af5d4f1d65edb006efef3af 100644 (file)
@@ -753,6 +753,7 @@ static BlockDriver bdrv_dmg = {
     .bdrv_child_perm     = bdrv_format_default_perms,
     .bdrv_co_preadv = dmg_co_preadv,
     .bdrv_close     = dmg_close,
+    .is_format      = true,
 };
 
 static void bdrv_dmg_init(void)
index e7717c508e62588580a9cdc4bd76be6d422b4d3f..bd5f6ffa09aa8e0a5aec2304623c969622e41714 100644 (file)
@@ -918,6 +918,7 @@ static BlockDriver bdrv_parallels = {
     .bdrv_co_flush_to_os      = parallels_co_flush_to_os,
     .bdrv_co_readv  = parallels_co_readv,
     .bdrv_co_writev = parallels_co_writev,
+    .is_format      = true,
     .supports_backing = true,
     .bdrv_co_create      = parallels_co_create,
     .bdrv_co_create_opts = parallels_co_create_opts,
index b0475b73a551d24b554d1d198b3766c43dd88193..6a72dea049e391eb7f9f331f39f44f1136374092 100644 (file)
@@ -1185,6 +1185,7 @@ static BlockDriver bdrv_qcow = {
     .bdrv_co_create         = qcow_co_create,
     .bdrv_co_create_opts    = qcow_co_create_opts,
     .bdrv_has_zero_init     = bdrv_has_zero_init_1,
+    .is_format              = true,
     .supports_backing       = true,
     .bdrv_refresh_limits    = qcow_refresh_limits,
 
index ad9ab4fafa00d54e687727bb0de1ad48d55920fb..76bec61ee94075353512b34efeb8a4773511fc63 100644 (file)
@@ -5767,6 +5767,7 @@ BlockDriver bdrv_qcow2 = {
     .bdrv_save_vmstate    = qcow2_save_vmstate,
     .bdrv_load_vmstate    = qcow2_load_vmstate,
 
+    .is_format                  = true,
     .supports_backing           = true,
     .bdrv_change_backing_file   = qcow2_change_backing_file,
 
index 5da9726518dfed0138afb206c4d163f2f22346dd..337eb6dbb6b7b24502fce1fd29b6a494318789f1 100644 (file)
@@ -1665,6 +1665,7 @@ static BlockDriver bdrv_qed = {
     .format_name              = "qed",
     .instance_size            = sizeof(BDRVQEDState),
     .create_opts              = &qed_create_opts,
+    .is_format                = true,
     .supports_backing         = true,
 
     .bdrv_probe               = bdrv_qed_probe,
index 9108e4369628610971b8d37e4644d1e6e4db74e8..00e13bb41e769a0d4fde6d794847b4f908adfe38 100644 (file)
@@ -566,6 +566,7 @@ BlockDriver bdrv_raw = {
     .bdrv_co_copy_range_to  = &raw_co_copy_range_to,
     .bdrv_co_truncate     = &raw_co_truncate,
     .bdrv_getlength       = &raw_getlength,
+    .is_format            = true,
     .has_variable_length  = true,
     .bdrv_measure         = &raw_measure,
     .bdrv_get_info        = &raw_get_info,
index 2d2804661527f277592831e918a1634d73881454..0ef733ae190c24fd55b730bd3f609a0d52874041 100644 (file)
@@ -1053,6 +1053,7 @@ static BlockDriver bdrv_vdi = {
 
     .bdrv_get_info = vdi_get_info,
 
+    .is_format = true,
     .create_opts = &vdi_create_opts,
     .bdrv_co_check = vdi_co_check,
 };
index 53e756438ac4debadfe4bba56a9b8004c7e66ce9..e692cf80ccae2cad03305392a2bf0171a78d4ad8 100644 (file)
@@ -2254,6 +2254,7 @@ static BlockDriver bdrv_vhdx = {
     .bdrv_co_check          = vhdx_co_check,
     .bdrv_has_zero_init     = vhdx_has_zero_init,
 
+    .is_format              = true,
     .create_opts            = &vhdx_create_opts,
 };
 
index b18f1288163654ffd50482519f72496f43fb84a5..56e85689f3fe1153a8e4e07888d262a070a7d678 100644 (file)
@@ -3070,6 +3070,7 @@ static BlockDriver bdrv_vmdk = {
     .bdrv_get_info                = vmdk_get_info,
     .bdrv_gather_child_options    = vmdk_gather_child_options,
 
+    .is_format                    = true,
     .supports_backing             = true,
     .create_opts                  = &vmdk_create_opts,
 };
index 5e31dd1e47a10560a0af39f933e2870da84fb4c4..46a2d48659857f9d8a69b5bb8a4ec24ace47c280 100644 (file)
@@ -1250,6 +1250,7 @@ static BlockDriver bdrv_vpc = {
 
     .bdrv_get_info          = vpc_get_info,
 
+    .is_format              = true,
     .create_opts            = &vpc_create_opts,
     .bdrv_has_zero_init     = vpc_has_zero_init,
     .strong_runtime_opts    = vpc_strong_runtime_opts,
index 7ba8c89036091a34fb67f22b8f11539ca580272c..1c24df53fd46da63ddada5449bec7a124195b2f7 100644 (file)
@@ -95,6 +95,13 @@ struct BlockDriver {
      * must implement them and return -ENOTSUP.
      */
     bool is_filter;
+    /*
+     * Set to true if the BlockDriver is a format driver.  Format nodes
+     * generally do not expect their children to be other format nodes
+     * (except for backing files), and so format probing is disabled
+     * on those children.
+     */
+    bool is_format;
     /*
      * Return true if @to_replace can be replaced by a BDS with the
      * same data as @bs without it affecting @bs's behavior (that is,