diff mbox

[1/3] blockdev: prepare iSCSI block driver for dynamic loading

Message ID 1466631354-17309-2-git-send-email-clord@redhat.com
State New
Headers show

Commit Message

clord@redhat.com June 22, 2016, 9:35 p.m. UTC
This commit moves the initialization of the QemuOptsList qemu_iscsi_opts
struct out of block/iscsi.c in order to allow it to be dynamically
loaded. Drivers that perform init operations other than registering
themselves can't be modularized, so this moves the initialization of
this struct into the main binary.

Signed-off-by: Colin Lord <clord@redhat.com>
---
 block/iscsi.c | 36 ------------------------------------
 vl.c          | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 36 deletions(-)

Comments

Fam Zheng June 23, 2016, 1:22 a.m. UTC | #1
On Wed, 06/22 17:35, Colin Lord wrote:
> This commit moves the initialization of the QemuOptsList qemu_iscsi_opts
> struct out of block/iscsi.c in order to allow it to be dynamically
> loaded. Drivers that perform init operations other than registering
> themselves can't be modularized, so this moves the initialization of
> this struct into the main binary.
> 
> Signed-off-by: Colin Lord <clord@redhat.com>
> ---
>  block/iscsi.c | 36 ------------------------------------
>  vl.c          | 36 ++++++++++++++++++++++++++++++++++++
>  2 files changed, 36 insertions(+), 36 deletions(-)
> 
> diff --git a/block/iscsi.c b/block/iscsi.c
> index 7e78ade..6193499 100644
> --- a/block/iscsi.c
> +++ b/block/iscsi.c
> @@ -1879,45 +1879,9 @@ static BlockDriver bdrv_iscsi = {
>      .bdrv_attach_aio_context = iscsi_attach_aio_context,
>  };
>  
> -static QemuOptsList qemu_iscsi_opts = {
> -    .name = "iscsi",
> -    .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
> -    .desc = {
> -        {
> -            .name = "user",
> -            .type = QEMU_OPT_STRING,
> -            .help = "username for CHAP authentication to target",
> -        },{
> -            .name = "password",
> -            .type = QEMU_OPT_STRING,
> -            .help = "password for CHAP authentication to target",
> -        },{
> -            .name = "password-secret",
> -            .type = QEMU_OPT_STRING,
> -            .help = "ID of the secret providing password for CHAP "
> -                    "authentication to target",
> -        },{
> -            .name = "header-digest",
> -            .type = QEMU_OPT_STRING,
> -            .help = "HeaderDigest setting. "
> -                    "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
> -        },{
> -            .name = "initiator-name",
> -            .type = QEMU_OPT_STRING,
> -            .help = "Initiator iqn name to use when connecting",
> -        },{
> -            .name = "timeout",
> -            .type = QEMU_OPT_NUMBER,
> -            .help = "Request timeout in seconds (default 0 = no timeout)",
> -        },
> -        { /* end of list */ }
> -    },
> -};
> -
>  static void iscsi_block_init(void)
>  {
>      bdrv_register(&bdrv_iscsi);
> -    qemu_add_opts(&qemu_iscsi_opts);
>  }
>  
>  block_init(iscsi_block_init);
> diff --git a/vl.c b/vl.c
> index 45eff56..4f04daa 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -526,6 +526,41 @@ static QemuOptsList qemu_fw_cfg_opts = {
>      },
>  };
>  
> +static QemuOptsList qemu_iscsi_opts = {
> +    .name = "iscsi",
> +    .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
> +    .desc = {
> +        {
> +            .name = "user",
> +            .type = QEMU_OPT_STRING,
> +            .help = "username for CHAP authentication to target",
> +        },{
> +            .name = "password",
> +            .type = QEMU_OPT_STRING,
> +            .help = "password for CHAP authentication to target",
> +        },{
> +            .name = "password-secret",
> +            .type = QEMU_OPT_STRING,
> +            .help = "ID of the secret providing password for CHAP "
> +                    "authentication to target",
> +        },{
> +            .name = "header-digest",
> +            .type = QEMU_OPT_STRING,
> +            .help = "HeaderDigest setting. "
> +                    "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
> +        },{
> +            .name = "initiator-name",
> +            .type = QEMU_OPT_STRING,
> +            .help = "Initiator iqn name to use when connecting",
> +        },{
> +            .name = "timeout",
> +            .type = QEMU_OPT_NUMBER,
> +            .help = "Request timeout in seconds (default 0 = no timeout)",
> +        },
> +        { /* end of list */ }
> +    },
> +};
> +
>  /**
>   * Get machine options
>   *
> @@ -3006,6 +3041,7 @@ int main(int argc, char **argv, char **envp)
>      qemu_add_opts(&qemu_icount_opts);
>      qemu_add_opts(&qemu_semihosting_config_opts);
>      qemu_add_opts(&qemu_fw_cfg_opts);
> +    qemu_add_opts(&qemu_iscsi_opts);

Should the new code still be conditional on CONFIG_LIBISCSI?  Because
previously it was.

Fam

>      module_call_init(MODULE_INIT_OPTS);
>  
>      runstate_init();
> -- 
> 2.5.5
> 
>
clord@redhat.com June 23, 2016, 8:44 p.m. UTC | #2
On 06/22/2016 09:22 PM, Fam Zheng wrote:
> On Wed, 06/22 17:35, Colin Lord wrote:
>> This commit moves the initialization of the QemuOptsList qemu_iscsi_opts
>> struct out of block/iscsi.c in order to allow it to be dynamically
>> loaded. Drivers that perform init operations other than registering
>> themselves can't be modularized, so this moves the initialization of
>> this struct into the main binary.
>>
>> Signed-off-by: Colin Lord <clord@redhat.com>
>> ---
>>  block/iscsi.c | 36 ------------------------------------
>>  vl.c          | 36 ++++++++++++++++++++++++++++++++++++
>>  2 files changed, 36 insertions(+), 36 deletions(-)
>>
>> diff --git a/block/iscsi.c b/block/iscsi.c
>> index 7e78ade..6193499 100644
>> --- a/block/iscsi.c
>> +++ b/block/iscsi.c
>> @@ -1879,45 +1879,9 @@ static BlockDriver bdrv_iscsi = {
>>      .bdrv_attach_aio_context = iscsi_attach_aio_context,
>>  };
>>  
>> -static QemuOptsList qemu_iscsi_opts = {
>> -    .name = "iscsi",
>> -    .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
>> -    .desc = {
>> -        {
>> -            .name = "user",
>> -            .type = QEMU_OPT_STRING,
>> -            .help = "username for CHAP authentication to target",
>> -        },{
>> -            .name = "password",
>> -            .type = QEMU_OPT_STRING,
>> -            .help = "password for CHAP authentication to target",
>> -        },{
>> -            .name = "password-secret",
>> -            .type = QEMU_OPT_STRING,
>> -            .help = "ID of the secret providing password for CHAP "
>> -                    "authentication to target",
>> -        },{
>> -            .name = "header-digest",
>> -            .type = QEMU_OPT_STRING,
>> -            .help = "HeaderDigest setting. "
>> -                    "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
>> -        },{
>> -            .name = "initiator-name",
>> -            .type = QEMU_OPT_STRING,
>> -            .help = "Initiator iqn name to use when connecting",
>> -        },{
>> -            .name = "timeout",
>> -            .type = QEMU_OPT_NUMBER,
>> -            .help = "Request timeout in seconds (default 0 = no timeout)",
>> -        },
>> -        { /* end of list */ }
>> -    },
>> -};
>> -
>>  static void iscsi_block_init(void)
>>  {
>>      bdrv_register(&bdrv_iscsi);
>> -    qemu_add_opts(&qemu_iscsi_opts);
>>  }
>>  
>>  block_init(iscsi_block_init);
>> diff --git a/vl.c b/vl.c
>> index 45eff56..4f04daa 100644
>> --- a/vl.c
>> +++ b/vl.c
>> @@ -526,6 +526,41 @@ static QemuOptsList qemu_fw_cfg_opts = {
>>      },
>>  };
>>  
>> +static QemuOptsList qemu_iscsi_opts = {
>> +    .name = "iscsi",
>> +    .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
>> +    .desc = {
>> +        {
>> +            .name = "user",
>> +            .type = QEMU_OPT_STRING,
>> +            .help = "username for CHAP authentication to target",
>> +        },{
>> +            .name = "password",
>> +            .type = QEMU_OPT_STRING,
>> +            .help = "password for CHAP authentication to target",
>> +        },{
>> +            .name = "password-secret",
>> +            .type = QEMU_OPT_STRING,
>> +            .help = "ID of the secret providing password for CHAP "
>> +                    "authentication to target",
>> +        },{
>> +            .name = "header-digest",
>> +            .type = QEMU_OPT_STRING,
>> +            .help = "HeaderDigest setting. "
>> +                    "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
>> +        },{
>> +            .name = "initiator-name",
>> +            .type = QEMU_OPT_STRING,
>> +            .help = "Initiator iqn name to use when connecting",
>> +        },{
>> +            .name = "timeout",
>> +            .type = QEMU_OPT_NUMBER,
>> +            .help = "Request timeout in seconds (default 0 = no timeout)",
>> +        },
>> +        { /* end of list */ }
>> +    },
>> +};
>> +
>>  /**
>>   * Get machine options
>>   *
>> @@ -3006,6 +3041,7 @@ int main(int argc, char **argv, char **envp)
>>      qemu_add_opts(&qemu_icount_opts);
>>      qemu_add_opts(&qemu_semihosting_config_opts);
>>      qemu_add_opts(&qemu_fw_cfg_opts);
>> +    qemu_add_opts(&qemu_iscsi_opts);
> 
> Should the new code still be conditional on CONFIG_LIBISCSI?  Because
> previously it was.

Yeah, I think that should still be the case. Thanks for catching that.
> 
> Fam
> 
>>      module_call_init(MODULE_INIT_OPTS);
>>  
>>      runstate_init();
>> -- 
>> 2.5.5
>>
>>
diff mbox

Patch

diff --git a/block/iscsi.c b/block/iscsi.c
index 7e78ade..6193499 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -1879,45 +1879,9 @@  static BlockDriver bdrv_iscsi = {
     .bdrv_attach_aio_context = iscsi_attach_aio_context,
 };
 
-static QemuOptsList qemu_iscsi_opts = {
-    .name = "iscsi",
-    .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
-    .desc = {
-        {
-            .name = "user",
-            .type = QEMU_OPT_STRING,
-            .help = "username for CHAP authentication to target",
-        },{
-            .name = "password",
-            .type = QEMU_OPT_STRING,
-            .help = "password for CHAP authentication to target",
-        },{
-            .name = "password-secret",
-            .type = QEMU_OPT_STRING,
-            .help = "ID of the secret providing password for CHAP "
-                    "authentication to target",
-        },{
-            .name = "header-digest",
-            .type = QEMU_OPT_STRING,
-            .help = "HeaderDigest setting. "
-                    "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
-        },{
-            .name = "initiator-name",
-            .type = QEMU_OPT_STRING,
-            .help = "Initiator iqn name to use when connecting",
-        },{
-            .name = "timeout",
-            .type = QEMU_OPT_NUMBER,
-            .help = "Request timeout in seconds (default 0 = no timeout)",
-        },
-        { /* end of list */ }
-    },
-};
-
 static void iscsi_block_init(void)
 {
     bdrv_register(&bdrv_iscsi);
-    qemu_add_opts(&qemu_iscsi_opts);
 }
 
 block_init(iscsi_block_init);
diff --git a/vl.c b/vl.c
index 45eff56..4f04daa 100644
--- a/vl.c
+++ b/vl.c
@@ -526,6 +526,41 @@  static QemuOptsList qemu_fw_cfg_opts = {
     },
 };
 
+static QemuOptsList qemu_iscsi_opts = {
+    .name = "iscsi",
+    .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
+    .desc = {
+        {
+            .name = "user",
+            .type = QEMU_OPT_STRING,
+            .help = "username for CHAP authentication to target",
+        },{
+            .name = "password",
+            .type = QEMU_OPT_STRING,
+            .help = "password for CHAP authentication to target",
+        },{
+            .name = "password-secret",
+            .type = QEMU_OPT_STRING,
+            .help = "ID of the secret providing password for CHAP "
+                    "authentication to target",
+        },{
+            .name = "header-digest",
+            .type = QEMU_OPT_STRING,
+            .help = "HeaderDigest setting. "
+                    "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
+        },{
+            .name = "initiator-name",
+            .type = QEMU_OPT_STRING,
+            .help = "Initiator iqn name to use when connecting",
+        },{
+            .name = "timeout",
+            .type = QEMU_OPT_NUMBER,
+            .help = "Request timeout in seconds (default 0 = no timeout)",
+        },
+        { /* end of list */ }
+    },
+};
+
 /**
  * Get machine options
  *
@@ -3006,6 +3041,7 @@  int main(int argc, char **argv, char **envp)
     qemu_add_opts(&qemu_icount_opts);
     qemu_add_opts(&qemu_semihosting_config_opts);
     qemu_add_opts(&qemu_fw_cfg_opts);
+    qemu_add_opts(&qemu_iscsi_opts);
     module_call_init(MODULE_INIT_OPTS);
 
     runstate_init();