Skip to content

Commit 796d323

Browse files
Markus Armbrusterkevmw
Markus Armbruster
authored andcommitted
block/crypto: Simplify block_crypto_{open,create}_opts_init()
block_crypto_open_opts_init() and block_crypto_create_opts_init() contain a virtual visit of QCryptoBlockOptions and QCryptoBlockCreateOptions less member "format", respectively. Change their callers to put member "format" in the QDict, so they can use the generated visitors for these types instead. Signed-off-by: Markus Armbruster <[email protected]> Reviewed-by: Eric Blake <[email protected]> Signed-off-by: Kevin Wolf <[email protected]>
1 parent 37aec7d commit 796d323

File tree

4 files changed

+22
-100
lines changed

4 files changed

+22
-100
lines changed

block/crypto.c

+14-85
Original file line numberDiff line numberDiff line change
@@ -148,108 +148,36 @@ static QemuOptsList block_crypto_create_opts_luks = {
148148

149149

150150
QCryptoBlockOpenOptions *
151-
block_crypto_open_opts_init(QCryptoBlockFormat format,
152-
QDict *opts,
153-
Error **errp)
151+
block_crypto_open_opts_init(QDict *opts, Error **errp)
154152
{
155153
Visitor *v;
156-
QCryptoBlockOpenOptions *ret = NULL;
157-
Error *local_err = NULL;
158-
159-
ret = g_new0(QCryptoBlockOpenOptions, 1);
160-
ret->format = format;
154+
QCryptoBlockOpenOptions *ret;
161155

162-
v = qobject_input_visitor_new_flat_confused(opts, &local_err);
156+
v = qobject_input_visitor_new_flat_confused(opts, errp);
163157
if (!v) {
164-
goto out;
165-
}
166-
167-
visit_start_struct(v, NULL, NULL, 0, &local_err);
168-
if (local_err) {
169-
goto out;
170-
}
171-
172-
switch (format) {
173-
case Q_CRYPTO_BLOCK_FORMAT_LUKS:
174-
visit_type_QCryptoBlockOptionsLUKS_members(
175-
v, &ret->u.luks, &local_err);
176-
break;
177-
178-
case Q_CRYPTO_BLOCK_FORMAT_QCOW:
179-
visit_type_QCryptoBlockOptionsQCow_members(
180-
v, &ret->u.qcow, &local_err);
181-
break;
182-
183-
default:
184-
error_setg(&local_err, "Unsupported block format %d", format);
185-
break;
186-
}
187-
if (!local_err) {
188-
visit_check_struct(v, &local_err);
158+
return NULL;
189159
}
190160

191-
visit_end_struct(v, NULL);
161+
visit_type_QCryptoBlockOpenOptions(v, NULL, &ret, errp);
192162

193-
out:
194-
if (local_err) {
195-
error_propagate(errp, local_err);
196-
qapi_free_QCryptoBlockOpenOptions(ret);
197-
ret = NULL;
198-
}
199163
visit_free(v);
200164
return ret;
201165
}
202166

203167

204168
QCryptoBlockCreateOptions *
205-
block_crypto_create_opts_init(QCryptoBlockFormat format,
206-
QDict *opts,
207-
Error **errp)
169+
block_crypto_create_opts_init(QDict *opts, Error **errp)
208170
{
209171
Visitor *v;
210-
QCryptoBlockCreateOptions *ret = NULL;
211-
Error *local_err = NULL;
212-
213-
ret = g_new0(QCryptoBlockCreateOptions, 1);
214-
ret->format = format;
172+
QCryptoBlockCreateOptions *ret;
215173

216-
v = qobject_input_visitor_new_flat_confused(opts, &local_err);
174+
v = qobject_input_visitor_new_flat_confused(opts, errp);
217175
if (!v) {
218-
goto out;
219-
}
220-
221-
visit_start_struct(v, NULL, NULL, 0, &local_err);
222-
if (local_err) {
223-
goto out;
224-
}
225-
226-
switch (format) {
227-
case Q_CRYPTO_BLOCK_FORMAT_LUKS:
228-
visit_type_QCryptoBlockCreateOptionsLUKS_members(
229-
v, &ret->u.luks, &local_err);
230-
break;
231-
232-
case Q_CRYPTO_BLOCK_FORMAT_QCOW:
233-
visit_type_QCryptoBlockOptionsQCow_members(
234-
v, &ret->u.qcow, &local_err);
235-
break;
236-
237-
default:
238-
error_setg(&local_err, "Unsupported block format %d", format);
239-
break;
240-
}
241-
if (!local_err) {
242-
visit_check_struct(v, &local_err);
176+
return NULL;
243177
}
244178

245-
visit_end_struct(v, NULL);
179+
visit_type_QCryptoBlockCreateOptions(v, NULL, &ret, errp);
246180

247-
out:
248-
if (local_err) {
249-
error_propagate(errp, local_err);
250-
qapi_free_QCryptoBlockCreateOptions(ret);
251-
ret = NULL;
252-
}
253181
visit_free(v);
254182
return ret;
255183
}
@@ -287,8 +215,9 @@ static int block_crypto_open_generic(QCryptoBlockFormat format,
287215
}
288216

289217
cryptoopts = qemu_opts_to_qdict(opts, NULL);
218+
qdict_put_str(cryptoopts, "format", QCryptoBlockFormat_str(format));
290219

291-
open_opts = block_crypto_open_opts_init(format, cryptoopts, errp);
220+
open_opts = block_crypto_open_opts_init(cryptoopts, errp);
292221
if (!open_opts) {
293222
goto cleanup;
294223
}
@@ -612,8 +541,8 @@ static int coroutine_fn block_crypto_co_create_opts_luks(const char *filename,
612541
&block_crypto_create_opts_luks,
613542
true);
614543

615-
create_opts = block_crypto_create_opts_init(Q_CRYPTO_BLOCK_FORMAT_LUKS,
616-
cryptoopts, errp);
544+
qdict_put_str(cryptoopts, "format", "luks");
545+
create_opts = block_crypto_create_opts_init(cryptoopts, errp);
617546
if (!create_opts) {
618547
ret = -EINVAL;
619548
goto fail;

block/crypto.h

+2-6
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,9 @@
8989
}
9090

9191
QCryptoBlockCreateOptions *
92-
block_crypto_create_opts_init(QCryptoBlockFormat format,
93-
QDict *opts,
94-
Error **errp);
92+
block_crypto_create_opts_init(QDict *opts, Error **errp);
9593

9694
QCryptoBlockOpenOptions *
97-
block_crypto_open_opts_init(QCryptoBlockFormat format,
98-
QDict *opts,
99-
Error **errp);
95+
block_crypto_open_opts_init(QDict *opts, Error **errp);
10096

10197
#endif /* BLOCK_CRYPTO_H__ */

block/qcow.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,8 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
203203
ret = -EINVAL;
204204
goto fail;
205205
}
206-
qdict_del(encryptopts, "format");
207-
crypto_opts = block_crypto_open_opts_init(
208-
Q_CRYPTO_BLOCK_FORMAT_QCOW, encryptopts, errp);
206+
qdict_put_str(encryptopts, "format", "qcow");
207+
crypto_opts = block_crypto_open_opts_init(encryptopts, errp);
209208
if (!crypto_opts) {
210209
ret = -EINVAL;
211210
goto fail;

block/qcow2.c

+4-6
Original file line numberDiff line numberDiff line change
@@ -1040,9 +1040,8 @@ static int qcow2_update_options_prepare(BlockDriverState *bs,
10401040
ret = -EINVAL;
10411041
goto fail;
10421042
}
1043-
qdict_del(encryptopts, "format");
1044-
r->crypto_opts = block_crypto_open_opts_init(
1045-
Q_CRYPTO_BLOCK_FORMAT_QCOW, encryptopts, errp);
1043+
qdict_put_str(encryptopts, "format", "qcow");
1044+
r->crypto_opts = block_crypto_open_opts_init(encryptopts, errp);
10461045
break;
10471046

10481047
case QCOW_CRYPT_LUKS:
@@ -1053,9 +1052,8 @@ static int qcow2_update_options_prepare(BlockDriverState *bs,
10531052
ret = -EINVAL;
10541053
goto fail;
10551054
}
1056-
qdict_del(encryptopts, "format");
1057-
r->crypto_opts = block_crypto_open_opts_init(
1058-
Q_CRYPTO_BLOCK_FORMAT_LUKS, encryptopts, errp);
1055+
qdict_put_str(encryptopts, "format", "luks");
1056+
r->crypto_opts = block_crypto_open_opts_init(encryptopts, errp);
10591057
break;
10601058

10611059
default:

0 commit comments

Comments
 (0)