* [Qemu-devel] [PATCH for-2.11 0/7] Code cleanup and minor fixes
@ 2017-08-08 13:39 Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 1/7] block/ssh: don't call libssh2_init() in block_init() Jeff Cody
` (6 more replies)
0 siblings, 7 replies; 8+ messages in thread
From: Jeff Cody @ 2017-08-08 13:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, mitake.hitoshi, namei.unix, rjones, kwolf
Some minor cleanup for a few network protocols, with a few bug fixes thrown in.
I don't think there is anything in here that needs to be for 2.10, however.
Jeff Cody (7):
block/ssh: don't call libssh2_init() in block_init()
block/ssh: make compliant with coding guidelines
block/sheepdog: remove spurious NULL check
block/sheepdog: code beautification
block/curl: check error return of curl_global_init()
block/curl: fix minor memory leaks
block/curl: code cleanup to comply with coding style
block/curl.c | 124 +++++++++++++++++++++++------------------
block/sheepdog.c | 164 +++++++++++++++++++++++++++----------------------------
block/ssh.c | 72 +++++++++++++++---------
3 files changed, 199 insertions(+), 161 deletions(-)
--
2.9.4
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH for-2.11 1/7] block/ssh: don't call libssh2_init() in block_init()
2017-08-08 13:39 [Qemu-devel] [PATCH for-2.11 0/7] Code cleanup and minor fixes Jeff Cody
@ 2017-08-08 13:39 ` Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 2/7] block/ssh: make compliant with coding guidelines Jeff Cody
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Jeff Cody @ 2017-08-08 13:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, mitake.hitoshi, namei.unix, rjones, kwolf
We don't need libssh2 failure to be fatal (we could just opt to not
register the driver on failure). But, it is probably a good idea to
avoid external library calls during the block_init(), and call the
libssh2 global init function on the first usage, returning any errors.
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
block/ssh.c | 40 +++++++++++++++++++++++++++++-----------
1 file changed, 29 insertions(+), 11 deletions(-)
diff --git a/block/ssh.c b/block/ssh.c
index e8f0404..cbb0e34 100644
--- a/block/ssh.c
+++ b/block/ssh.c
@@ -83,12 +83,28 @@ typedef struct BDRVSSHState {
bool unsafe_flush_warning;
} BDRVSSHState;
-static void ssh_state_init(BDRVSSHState *s)
+static bool ssh_libinit_called;
+
+static int ssh_state_init(BDRVSSHState *s, Error **errp)
{
+ int ret;
+
+ if (!ssh_libinit_called) {
+ ret = libssh2_init(0);
+ if (ret) {
+ error_setg(errp, "libssh2 initialization failed with %d", ret);
+ return ret;
+ }
+ ssh_libinit_called = true;
+ }
+
+
memset(s, 0, sizeof *s);
s->sock = -1;
s->offset = -1;
qemu_co_mutex_init(&s->lock);
+
+ return 0;
}
static void ssh_state_free(BDRVSSHState *s)
@@ -772,8 +788,13 @@ static int ssh_file_open(BlockDriverState *bs, QDict *options, int bdrv_flags,
BDRVSSHState *s = bs->opaque;
int ret;
int ssh_flags;
+ Error *local_err = NULL;
- ssh_state_init(s);
+ ret = ssh_state_init(s, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return ret;
+ }
ssh_flags = LIBSSH2_FXF_READ;
if (bdrv_flags & BDRV_O_RDWR) {
@@ -821,8 +842,13 @@ static int ssh_create(const char *filename, QemuOpts *opts, Error **errp)
BDRVSSHState s;
ssize_t r2;
char c[1] = { '\0' };
+ Error *local_err = NULL;
- ssh_state_init(&s);
+ ret = ssh_state_init(&s, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return ret;
+ }
/* Get desired file size. */
total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
@@ -1213,14 +1239,6 @@ static BlockDriver bdrv_ssh = {
static void bdrv_ssh_init(void)
{
- int r;
-
- r = libssh2_init(0);
- if (r != 0) {
- fprintf(stderr, "libssh2 initialization failed, %d\n", r);
- exit(EXIT_FAILURE);
- }
-
bdrv_register(&bdrv_ssh);
}
--
2.9.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH for-2.11 2/7] block/ssh: make compliant with coding guidelines
2017-08-08 13:39 [Qemu-devel] [PATCH for-2.11 0/7] Code cleanup and minor fixes Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 1/7] block/ssh: don't call libssh2_init() in block_init() Jeff Cody
@ 2017-08-08 13:39 ` Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 3/7] block/sheepdog: remove spurious NULL check Jeff Cody
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Jeff Cody @ 2017-08-08 13:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, mitake.hitoshi, namei.unix, rjones, kwolf
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
block/ssh.c | 32 ++++++++++++++++++--------------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/block/ssh.c b/block/ssh.c
index cbb0e34..97f7673 100644
--- a/block/ssh.c
+++ b/block/ssh.c
@@ -241,7 +241,7 @@ static int parse_uri(const char *filename, QDict *options, Error **errp)
goto err;
}
- if(uri->user && strcmp(uri->user, "") != 0) {
+ if (uri->user && strcmp(uri->user, "") != 0) {
qdict_put_str(options, "user", uri->user);
}
@@ -268,7 +268,7 @@ static int parse_uri(const char *filename, QDict *options, Error **errp)
err:
if (uri) {
- uri_free(uri);
+ uri_free(uri);
}
return -EINVAL;
}
@@ -342,7 +342,7 @@ static int check_host_key_knownhosts(BDRVSSHState *s,
libssh2_knownhost_readfile(knh, knh_file, LIBSSH2_KNOWNHOST_FILE_OPENSSH);
r = libssh2_knownhost_checkp(knh, host, port, hostkey, len,
- LIBSSH2_KNOWNHOST_TYPE_PLAIN|
+ LIBSSH2_KNOWNHOST_TYPE_PLAIN |
LIBSSH2_KNOWNHOST_KEYENC_RAW,
&found);
switch (r) {
@@ -405,15 +405,18 @@ static int compare_fingerprint(const unsigned char *fingerprint, size_t len,
unsigned c;
while (len > 0) {
- while (*host_key_check == ':')
+ while (*host_key_check == ':') {
host_key_check++;
+ }
if (!qemu_isxdigit(host_key_check[0]) ||
- !qemu_isxdigit(host_key_check[1]))
+ !qemu_isxdigit(host_key_check[1])) {
return 1;
+ }
c = hex2decimal(host_key_check[0]) * 16 +
hex2decimal(host_key_check[1]);
- if (c - *fingerprint != 0)
+ if (c - *fingerprint != 0) {
return c - *fingerprint;
+ }
fingerprint++;
len--;
host_key_check += 2;
@@ -433,8 +436,8 @@ check_host_key_hash(BDRVSSHState *s, const char *hash,
return -EINVAL;
}
- if(compare_fingerprint((unsigned char *) fingerprint, fingerprint_len,
- hash) != 0) {
+ if (compare_fingerprint((unsigned char *) fingerprint, fingerprint_len,
+ hash) != 0) {
error_setg(errp, "remote host key does not match host_key_check '%s'",
hash);
return -EPERM;
@@ -507,7 +510,7 @@ static int authenticate(BDRVSSHState *s, const char *user, Error **errp)
goto out;
}
- for(;;) {
+ for (;;) {
r = libssh2_agent_get_identity(agent, &identity, prev_identity);
if (r == 1) { /* end of list */
break;
@@ -863,8 +866,8 @@ static int ssh_create(const char *filename, QemuOpts *opts, Error **errp)
}
r = connect_to_ssh(&s, uri_options,
- LIBSSH2_FXF_READ|LIBSSH2_FXF_WRITE|
- LIBSSH2_FXF_CREAT|LIBSSH2_FXF_TRUNC,
+ LIBSSH2_FXF_READ | LIBSSH2_FXF_WRITE |
+ LIBSSH2_FXF_CREAT | LIBSSH2_FXF_TRUNC,
0644, errp);
if (r < 0) {
ret = r;
@@ -872,7 +875,7 @@ static int ssh_create(const char *filename, QemuOpts *opts, Error **errp)
}
if (total_size > 0) {
- libssh2_sftp_seek64(s.sftp_handle, total_size-1);
+ libssh2_sftp_seek64(s.sftp_handle, total_size - 1);
r2 = libssh2_sftp_write(s.sftp_handle, c, 1);
if (r2 < 0) {
sftp_error_setg(errp, &s, "truncate failed");
@@ -1111,7 +1114,7 @@ static int ssh_write(BDRVSSHState *s, BlockDriverState *bs,
* works for me.
*/
if (r == 0) {
- ssh_seek(s, offset + written, SSH_SEEK_WRITE|SSH_SEEK_FORCE);
+ ssh_seek(s, offset + written, SSH_SEEK_WRITE | SSH_SEEK_FORCE);
co_yield(s, bs);
goto again;
}
@@ -1125,8 +1128,9 @@ static int ssh_write(BDRVSSHState *s, BlockDriverState *bs,
end_of_vec = i->iov_base + i->iov_len;
}
- if (offset + written > s->attrs.filesize)
+ if (offset + written > s->attrs.filesize) {
s->attrs.filesize = offset + written;
+ }
}
return 0;
--
2.9.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH for-2.11 3/7] block/sheepdog: remove spurious NULL check
2017-08-08 13:39 [Qemu-devel] [PATCH for-2.11 0/7] Code cleanup and minor fixes Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 1/7] block/ssh: don't call libssh2_init() in block_init() Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 2/7] block/ssh: make compliant with coding guidelines Jeff Cody
@ 2017-08-08 13:39 ` Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 4/7] block/sheepdog: code beautification Jeff Cody
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Jeff Cody @ 2017-08-08 13:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, mitake.hitoshi, namei.unix, rjones, kwolf
'tag' is already checked in the lines immediately preceding this check,
and set to non-NULL if NULL. No need to check again, it hasn't changed.
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
block/sheepdog.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/block/sheepdog.c b/block/sheepdog.c
index abb2e79..bbbfa72 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -1632,7 +1632,7 @@ static int sd_open(BlockDriverState *bs, QDict *options, int flags,
if (!tag) {
tag = "";
}
- if (tag && strlen(tag) >= SD_MAX_VDI_TAG_LEN) {
+ if (strlen(tag) >= SD_MAX_VDI_TAG_LEN) {
error_setg(errp, "value of parameter 'tag' is too long");
ret = -EINVAL;
goto err_no_fd;
--
2.9.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH for-2.11 4/7] block/sheepdog: code beautification
2017-08-08 13:39 [Qemu-devel] [PATCH for-2.11 0/7] Code cleanup and minor fixes Jeff Cody
` (2 preceding siblings ...)
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 3/7] block/sheepdog: remove spurious NULL check Jeff Cody
@ 2017-08-08 13:39 ` Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 5/7] block/curl: check error return of curl_global_init() Jeff Cody
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Jeff Cody @ 2017-08-08 13:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, mitake.hitoshi, namei.unix, rjones, kwolf
No functional changes, just whitespace manipulation.
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
block/sheepdog.c | 162 +++++++++++++++++++++++++++----------------------------
1 file changed, 81 insertions(+), 81 deletions(-)
diff --git a/block/sheepdog.c b/block/sheepdog.c
index bbbfa72..ad461f1 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -400,7 +400,7 @@ typedef struct BDRVSheepdogReopenState {
int cache_flags;
} BDRVSheepdogReopenState;
-static const char * sd_strerror(int err)
+static const char *sd_strerror(int err)
{
int i;
@@ -3078,111 +3078,111 @@ static QemuOptsList sd_create_opts = {
};
static BlockDriver bdrv_sheepdog = {
- .format_name = "sheepdog",
- .protocol_name = "sheepdog",
- .instance_size = sizeof(BDRVSheepdogState),
- .bdrv_parse_filename = sd_parse_filename,
- .bdrv_file_open = sd_open,
- .bdrv_reopen_prepare = sd_reopen_prepare,
- .bdrv_reopen_commit = sd_reopen_commit,
- .bdrv_reopen_abort = sd_reopen_abort,
- .bdrv_close = sd_close,
- .bdrv_create = sd_create,
- .bdrv_has_zero_init = bdrv_has_zero_init_1,
- .bdrv_getlength = sd_getlength,
+ .format_name = "sheepdog",
+ .protocol_name = "sheepdog",
+ .instance_size = sizeof(BDRVSheepdogState),
+ .bdrv_parse_filename = sd_parse_filename,
+ .bdrv_file_open = sd_open,
+ .bdrv_reopen_prepare = sd_reopen_prepare,
+ .bdrv_reopen_commit = sd_reopen_commit,
+ .bdrv_reopen_abort = sd_reopen_abort,
+ .bdrv_close = sd_close,
+ .bdrv_create = sd_create,
+ .bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_getlength = sd_getlength,
.bdrv_get_allocated_file_size = sd_get_allocated_file_size,
- .bdrv_truncate = sd_truncate,
+ .bdrv_truncate = sd_truncate,
- .bdrv_co_readv = sd_co_readv,
- .bdrv_co_writev = sd_co_writev,
- .bdrv_co_flush_to_disk = sd_co_flush_to_disk,
- .bdrv_co_pdiscard = sd_co_pdiscard,
- .bdrv_co_get_block_status = sd_co_get_block_status,
+ .bdrv_co_readv = sd_co_readv,
+ .bdrv_co_writev = sd_co_writev,
+ .bdrv_co_flush_to_disk = sd_co_flush_to_disk,
+ .bdrv_co_pdiscard = sd_co_pdiscard,
+ .bdrv_co_get_block_status = sd_co_get_block_status,
- .bdrv_snapshot_create = sd_snapshot_create,
- .bdrv_snapshot_goto = sd_snapshot_goto,
- .bdrv_snapshot_delete = sd_snapshot_delete,
- .bdrv_snapshot_list = sd_snapshot_list,
+ .bdrv_snapshot_create = sd_snapshot_create,
+ .bdrv_snapshot_goto = sd_snapshot_goto,
+ .bdrv_snapshot_delete = sd_snapshot_delete,
+ .bdrv_snapshot_list = sd_snapshot_list,
- .bdrv_save_vmstate = sd_save_vmstate,
- .bdrv_load_vmstate = sd_load_vmstate,
+ .bdrv_save_vmstate = sd_save_vmstate,
+ .bdrv_load_vmstate = sd_load_vmstate,
- .bdrv_detach_aio_context = sd_detach_aio_context,
- .bdrv_attach_aio_context = sd_attach_aio_context,
+ .bdrv_detach_aio_context = sd_detach_aio_context,
+ .bdrv_attach_aio_context = sd_attach_aio_context,
- .create_opts = &sd_create_opts,
+ .create_opts = &sd_create_opts,
};
static BlockDriver bdrv_sheepdog_tcp = {
- .format_name = "sheepdog",
- .protocol_name = "sheepdog+tcp",
- .instance_size = sizeof(BDRVSheepdogState),
- .bdrv_parse_filename = sd_parse_filename,
+ .format_name = "sheepdog",
+ .protocol_name = "sheepdog+tcp",
+ .instance_size = sizeof(BDRVSheepdogState),
+ .bdrv_parse_filename = sd_parse_filename,
.bdrv_file_open = sd_open,
- .bdrv_reopen_prepare = sd_reopen_prepare,
- .bdrv_reopen_commit = sd_reopen_commit,
- .bdrv_reopen_abort = sd_reopen_abort,
- .bdrv_close = sd_close,
- .bdrv_create = sd_create,
- .bdrv_has_zero_init = bdrv_has_zero_init_1,
- .bdrv_getlength = sd_getlength,
+ .bdrv_reopen_prepare = sd_reopen_prepare,
+ .bdrv_reopen_commit = sd_reopen_commit,
+ .bdrv_reopen_abort = sd_reopen_abort,
+ .bdrv_close = sd_close,
+ .bdrv_create = sd_create,
+ .bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_getlength = sd_getlength,
.bdrv_get_allocated_file_size = sd_get_allocated_file_size,
- .bdrv_truncate = sd_truncate,
+ .bdrv_truncate = sd_truncate,
- .bdrv_co_readv = sd_co_readv,
- .bdrv_co_writev = sd_co_writev,
- .bdrv_co_flush_to_disk = sd_co_flush_to_disk,
- .bdrv_co_pdiscard = sd_co_pdiscard,
- .bdrv_co_get_block_status = sd_co_get_block_status,
+ .bdrv_co_readv = sd_co_readv,
+ .bdrv_co_writev = sd_co_writev,
+ .bdrv_co_flush_to_disk = sd_co_flush_to_disk,
+ .bdrv_co_pdiscard = sd_co_pdiscard,
+ .bdrv_co_get_block_status = sd_co_get_block_status,
- .bdrv_snapshot_create = sd_snapshot_create,
- .bdrv_snapshot_goto = sd_snapshot_goto,
- .bdrv_snapshot_delete = sd_snapshot_delete,
- .bdrv_snapshot_list = sd_snapshot_list,
+ .bdrv_snapshot_create = sd_snapshot_create,
+ .bdrv_snapshot_goto = sd_snapshot_goto,
+ .bdrv_snapshot_delete = sd_snapshot_delete,
+ .bdrv_snapshot_list = sd_snapshot_list,
- .bdrv_save_vmstate = sd_save_vmstate,
- .bdrv_load_vmstate = sd_load_vmstate,
+ .bdrv_save_vmstate = sd_save_vmstate,
+ .bdrv_load_vmstate = sd_load_vmstate,
- .bdrv_detach_aio_context = sd_detach_aio_context,
- .bdrv_attach_aio_context = sd_attach_aio_context,
+ .bdrv_detach_aio_context = sd_detach_aio_context,
+ .bdrv_attach_aio_context = sd_attach_aio_context,
- .create_opts = &sd_create_opts,
+ .create_opts = &sd_create_opts,
};
static BlockDriver bdrv_sheepdog_unix = {
- .format_name = "sheepdog",
- .protocol_name = "sheepdog+unix",
- .instance_size = sizeof(BDRVSheepdogState),
- .bdrv_parse_filename = sd_parse_filename,
- .bdrv_file_open = sd_open,
- .bdrv_reopen_prepare = sd_reopen_prepare,
- .bdrv_reopen_commit = sd_reopen_commit,
- .bdrv_reopen_abort = sd_reopen_abort,
- .bdrv_close = sd_close,
- .bdrv_create = sd_create,
- .bdrv_has_zero_init = bdrv_has_zero_init_1,
- .bdrv_getlength = sd_getlength,
+ .format_name = "sheepdog",
+ .protocol_name = "sheepdog+unix",
+ .instance_size = sizeof(BDRVSheepdogState),
+ .bdrv_parse_filename = sd_parse_filename,
+ .bdrv_file_open = sd_open,
+ .bdrv_reopen_prepare = sd_reopen_prepare,
+ .bdrv_reopen_commit = sd_reopen_commit,
+ .bdrv_reopen_abort = sd_reopen_abort,
+ .bdrv_close = sd_close,
+ .bdrv_create = sd_create,
+ .bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_getlength = sd_getlength,
.bdrv_get_allocated_file_size = sd_get_allocated_file_size,
- .bdrv_truncate = sd_truncate,
+ .bdrv_truncate = sd_truncate,
- .bdrv_co_readv = sd_co_readv,
- .bdrv_co_writev = sd_co_writev,
- .bdrv_co_flush_to_disk = sd_co_flush_to_disk,
- .bdrv_co_pdiscard = sd_co_pdiscard,
- .bdrv_co_get_block_status = sd_co_get_block_status,
+ .bdrv_co_readv = sd_co_readv,
+ .bdrv_co_writev = sd_co_writev,
+ .bdrv_co_flush_to_disk = sd_co_flush_to_disk,
+ .bdrv_co_pdiscard = sd_co_pdiscard,
+ .bdrv_co_get_block_status = sd_co_get_block_status,
- .bdrv_snapshot_create = sd_snapshot_create,
- .bdrv_snapshot_goto = sd_snapshot_goto,
- .bdrv_snapshot_delete = sd_snapshot_delete,
- .bdrv_snapshot_list = sd_snapshot_list,
+ .bdrv_snapshot_create = sd_snapshot_create,
+ .bdrv_snapshot_goto = sd_snapshot_goto,
+ .bdrv_snapshot_delete = sd_snapshot_delete,
+ .bdrv_snapshot_list = sd_snapshot_list,
- .bdrv_save_vmstate = sd_save_vmstate,
- .bdrv_load_vmstate = sd_load_vmstate,
+ .bdrv_save_vmstate = sd_save_vmstate,
+ .bdrv_load_vmstate = sd_load_vmstate,
- .bdrv_detach_aio_context = sd_detach_aio_context,
- .bdrv_attach_aio_context = sd_attach_aio_context,
+ .bdrv_detach_aio_context = sd_detach_aio_context,
+ .bdrv_attach_aio_context = sd_attach_aio_context,
- .create_opts = &sd_create_opts,
+ .create_opts = &sd_create_opts,
};
static void bdrv_sheepdog_init(void)
--
2.9.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH for-2.11 5/7] block/curl: check error return of curl_global_init()
2017-08-08 13:39 [Qemu-devel] [PATCH for-2.11 0/7] Code cleanup and minor fixes Jeff Cody
` (3 preceding siblings ...)
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 4/7] block/sheepdog: code beautification Jeff Cody
@ 2017-08-08 13:39 ` Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 6/7] block/curl: fix minor memory leaks Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 7/7] block/curl: code cleanup to comply with coding style Jeff Cody
6 siblings, 0 replies; 8+ messages in thread
From: Jeff Cody @ 2017-08-08 13:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, mitake.hitoshi, namei.unix, rjones, kwolf
If curl_global_init() fails, per the documentation no other curl
functions may be called, so make sure to check the return value.
Also, some minor changes to the initialization latch variable 'inited':
- Make it static in the file, for clarity
- Change the name for clarity
- Make it a bool
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
block/curl.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/block/curl.c b/block/curl.c
index 2a244e2..00a9879 100644
--- a/block/curl.c
+++ b/block/curl.c
@@ -89,6 +89,8 @@ static CURLMcode __curl_multi_socket_action(CURLM *multi_handle,
struct BDRVCURLState;
+static bool libcurl_initialized;
+
typedef struct CURLAIOCB {
Coroutine *co;
QEMUIOVector *qiov;
@@ -686,14 +688,23 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags,
double d;
const char *secretid;
const char *protocol_delimiter;
+ int ret;
- static int inited = 0;
if (flags & BDRV_O_RDWR) {
error_setg(errp, "curl block device does not support writes");
return -EROFS;
}
+ if (!libcurl_initialized) {
+ ret = curl_global_init(CURL_GLOBAL_ALL);
+ if (ret) {
+ error_setg(errp, "libcurl initialization failed with %d", ret);
+ return -EIO;
+ }
+ libcurl_initialized = true;
+ }
+
qemu_mutex_init(&s->mutex);
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
@@ -772,11 +783,6 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags,
}
}
- if (!inited) {
- curl_global_init(CURL_GLOBAL_ALL);
- inited = 1;
- }
-
DPRINTF("CURL: Opening %s\n", file);
QSIMPLEQ_INIT(&s->free_state_waitq);
s->aio_context = bdrv_get_aio_context(bs);
--
2.9.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH for-2.11 6/7] block/curl: fix minor memory leaks
2017-08-08 13:39 [Qemu-devel] [PATCH for-2.11 0/7] Code cleanup and minor fixes Jeff Cody
` (4 preceding siblings ...)
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 5/7] block/curl: check error return of curl_global_init() Jeff Cody
@ 2017-08-08 13:39 ` Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 7/7] block/curl: code cleanup to comply with coding style Jeff Cody
6 siblings, 0 replies; 8+ messages in thread
From: Jeff Cody @ 2017-08-08 13:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, mitake.hitoshi, namei.unix, rjones, kwolf
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
block/curl.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/block/curl.c b/block/curl.c
index 00a9879..35cf417 100644
--- a/block/curl.c
+++ b/block/curl.c
@@ -857,6 +857,9 @@ out_noclean:
qemu_mutex_destroy(&s->mutex);
g_free(s->cookie);
g_free(s->url);
+ g_free(s->username);
+ g_free(s->proxyusername);
+ g_free(s->proxypassword);
qemu_opts_del(opts);
return -EINVAL;
}
@@ -955,6 +958,9 @@ static void curl_close(BlockDriverState *bs)
g_free(s->cookie);
g_free(s->url);
+ g_free(s->username);
+ g_free(s->proxyusername);
+ g_free(s->proxypassword);
}
static int64_t curl_getlength(BlockDriverState *bs)
--
2.9.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH for-2.11 7/7] block/curl: code cleanup to comply with coding style
2017-08-08 13:39 [Qemu-devel] [PATCH for-2.11 0/7] Code cleanup and minor fixes Jeff Cody
` (5 preceding siblings ...)
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 6/7] block/curl: fix minor memory leaks Jeff Cody
@ 2017-08-08 13:39 ` Jeff Cody
6 siblings, 0 replies; 8+ messages in thread
From: Jeff Cody @ 2017-08-08 13:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, mitake.hitoshi, namei.unix, rjones, kwolf
This addresses non-functional changes to help curl.c better comply
with the coding styles (comments, indentation, brackets, etc.).
One minor code change is the combination of two if statements into
a single if statement.
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
block/curl.c | 100 +++++++++++++++++++++++++++++++----------------------------
1 file changed, 52 insertions(+), 48 deletions(-)
diff --git a/block/curl.c b/block/curl.c
index 35cf417..c557b59 100644
--- a/block/curl.c
+++ b/block/curl.c
@@ -32,8 +32,10 @@
#include <curl/curl.h>
#include "qemu/cutils.h"
-// #define DEBUG_CURL
-// #define DEBUG_VERBOSE
+/*
+ #define DEBUG_CURL
+ #define DEBUG_VERBOSE
+*/
#ifdef DEBUG_CURL
#define DEBUG_CURL_PRINT 1
@@ -76,15 +78,15 @@ static CURLMcode __curl_multi_socket_action(CURLM *multi_handle,
#define CURL_TIMEOUT_DEFAULT 5
#define CURL_TIMEOUT_MAX 10000
-#define CURL_BLOCK_OPT_URL "url"
-#define CURL_BLOCK_OPT_READAHEAD "readahead"
-#define CURL_BLOCK_OPT_SSLVERIFY "sslverify"
-#define CURL_BLOCK_OPT_TIMEOUT "timeout"
-#define CURL_BLOCK_OPT_COOKIE "cookie"
-#define CURL_BLOCK_OPT_COOKIE_SECRET "cookie-secret"
-#define CURL_BLOCK_OPT_USERNAME "username"
-#define CURL_BLOCK_OPT_PASSWORD_SECRET "password-secret"
-#define CURL_BLOCK_OPT_PROXY_USERNAME "proxy-username"
+#define CURL_BLOCK_OPT_URL "url"
+#define CURL_BLOCK_OPT_READAHEAD "readahead"
+#define CURL_BLOCK_OPT_SSLVERIFY "sslverify"
+#define CURL_BLOCK_OPT_TIMEOUT "timeout"
+#define CURL_BLOCK_OPT_COOKIE "cookie"
+#define CURL_BLOCK_OPT_COOKIE_SECRET "cookie-secret"
+#define CURL_BLOCK_OPT_USERNAME "username"
+#define CURL_BLOCK_OPT_PASSWORD_SECRET "password-secret"
+#define CURL_BLOCK_OPT_PROXY_USERNAME "proxy-username"
#define CURL_BLOCK_OPT_PROXY_PASSWORD_SECRET "proxy-password-secret"
struct BDRVCURLState;
@@ -110,8 +112,7 @@ typedef struct CURLSocket {
QLIST_ENTRY(CURLSocket) next;
} CURLSocket;
-typedef struct CURLState
-{
+typedef struct CURLState {
struct BDRVCURLState *s;
CURLAIOCB *acb[CURL_NUM_ACB];
CURL *curl;
@@ -196,22 +197,22 @@ static int curl_sock_cb(CURL *curl, curl_socket_t fd, int action,
DPRINTF("CURL (AIO): Sock action %d on fd %d\n", action, (int)fd);
switch (action) {
- case CURL_POLL_IN:
- aio_set_fd_handler(s->aio_context, fd, false,
- curl_multi_read, NULL, NULL, state);
- break;
- case CURL_POLL_OUT:
- aio_set_fd_handler(s->aio_context, fd, false,
- NULL, curl_multi_do, NULL, state);
- break;
- case CURL_POLL_INOUT:
- aio_set_fd_handler(s->aio_context, fd, false,
- curl_multi_read, curl_multi_do, NULL, state);
- break;
- case CURL_POLL_REMOVE:
- aio_set_fd_handler(s->aio_context, fd, false,
- NULL, NULL, NULL, NULL);
- break;
+ case CURL_POLL_IN:
+ aio_set_fd_handler(s->aio_context, fd, false,
+ curl_multi_read, NULL, NULL, state);
+ break;
+ case CURL_POLL_OUT:
+ aio_set_fd_handler(s->aio_context, fd, false,
+ NULL, curl_multi_do, NULL, state);
+ break;
+ case CURL_POLL_INOUT:
+ aio_set_fd_handler(s->aio_context, fd, false,
+ curl_multi_read, curl_multi_do, NULL, state);
+ break;
+ case CURL_POLL_REMOVE:
+ aio_set_fd_handler(s->aio_context, fd, false,
+ NULL, NULL, NULL, NULL);
+ break;
}
return 0;
@@ -235,7 +236,7 @@ static size_t curl_header_cb(void *ptr, size_t size, size_t nmemb, void *opaque)
/* Called from curl_multi_do_locked, with s->mutex held. */
static size_t curl_read_cb(void *ptr, size_t size, size_t nmemb, void *opaque)
{
- CURLState *s = ((CURLState*)opaque);
+ CURLState *s = ((CURLState *)opaque);
size_t realsize = size * nmemb;
int i;
@@ -253,11 +254,12 @@ static size_t curl_read_cb(void *ptr, size_t size, size_t nmemb, void *opaque)
memcpy(s->orig_buf + s->buf_off, ptr, realsize);
s->buf_off += realsize;
- for(i=0; i<CURL_NUM_ACB; i++) {
+ for (i = 0; i < CURL_NUM_ACB; i++) {
CURLAIOCB *acb = s->acb[i];
- if (!acb)
+ if (!acb) {
continue;
+ }
if ((s->buf_off >= acb->end)) {
size_t request_length = acb->bytes;
@@ -293,17 +295,16 @@ static bool curl_find_buf(BDRVCURLState *s, uint64_t start, uint64_t len,
uint64_t clamped_end = MIN(end, s->len);
uint64_t clamped_len = clamped_end - start;
- for (i=0; i<CURL_NUM_STATES; i++) {
+ for (i = 0; i < CURL_NUM_STATES; i++) {
CURLState *state = &s->states[i];
uint64_t buf_end = (state->buf_start + state->buf_off);
uint64_t buf_fend = (state->buf_start + state->buf_len);
- if (!state->orig_buf)
- continue;
- if (!state->buf_off)
+ if (!state->orig_buf || !state->buf_off) {
continue;
+ }
- // Does the existing buffer cover our section?
+ /* Does the existing buffer cover our section? */
if ((start >= state->buf_start) &&
(start <= buf_end) &&
(clamped_end >= state->buf_start) &&
@@ -319,7 +320,7 @@ static bool curl_find_buf(BDRVCURLState *s, uint64_t start, uint64_t len,
return true;
}
- // Wait for unfinished chunks
+ /* Wait for unfinished chunks */
if (state->in_use &&
(start >= state->buf_start) &&
(start <= buf_fend) &&
@@ -331,7 +332,7 @@ static bool curl_find_buf(BDRVCURLState *s, uint64_t start, uint64_t len,
acb->start = start - state->buf_start;
acb->end = acb->start + clamped_len;
- for (j=0; j<CURL_NUM_ACB; j++) {
+ for (j = 0; j < CURL_NUM_ACB; j++) {
if (!state->acb[j]) {
state->acb[j] = acb;
return true;
@@ -355,8 +356,9 @@ static void curl_multi_check_completion(BDRVCURLState *s)
msg = curl_multi_info_read(s->multi, &msgs_in_queue);
/* Quit when there are no more completions */
- if (!msg)
+ if (!msg) {
break;
+ }
if (msg->msg == CURLMSG_DONE) {
CURLState *state = NULL;
@@ -540,12 +542,14 @@ static void curl_clean_state(CURLState *s)
{
CURLAIOCB *next;
int j;
+
for (j = 0; j < CURL_NUM_ACB; j++) {
assert(!s->acb[j]);
}
- if (s->s->multi)
+ if (s->s->multi) {
curl_multi_remove_handle(s->s->multi, s->curl);
+ }
while (!QLIST_EMPTY(&s->sockets)) {
CURLSocket *socket = QLIST_FIRST(&s->sockets);
@@ -794,7 +798,7 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags,
goto out_noclean;
}
- // Get file size
+ /* Get file size */
if (curl_init_state(s, state) < 0) {
goto out;
@@ -802,11 +806,11 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags,
s->accept_range = false;
curl_easy_setopt(state->curl, CURLOPT_NOBODY, 1);
- curl_easy_setopt(state->curl, CURLOPT_HEADERFUNCTION,
- curl_header_cb);
+ curl_easy_setopt(state->curl, CURLOPT_HEADERFUNCTION, curl_header_cb);
curl_easy_setopt(state->curl, CURLOPT_HEADERDATA, s);
- if (curl_easy_perform(state->curl))
+ if (curl_easy_perform(state->curl)) {
goto out;
+ }
if (curl_easy_getinfo(state->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d)) {
goto out;
}
@@ -876,13 +880,13 @@ static void curl_setup_preadv(BlockDriverState *bs, CURLAIOCB *acb)
qemu_mutex_lock(&s->mutex);
- // In case we have the requested data already (e.g. read-ahead),
- // we can just call the callback and be done.
+ /* In case we have the requested data already (e.g. read-ahead),
+ we can just call the callback and be done. */
if (curl_find_buf(s, start, acb->bytes, acb)) {
goto out;
}
- // No cache found, so let's start a new request
+ /* No cache found, so let's start a new request */
for (;;) {
state = curl_find_state(s);
if (state) {
--
2.9.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-08-08 13:39 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-08 13:39 [Qemu-devel] [PATCH for-2.11 0/7] Code cleanup and minor fixes Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 1/7] block/ssh: don't call libssh2_init() in block_init() Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 2/7] block/ssh: make compliant with coding guidelines Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 3/7] block/sheepdog: remove spurious NULL check Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 4/7] block/sheepdog: code beautification Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 5/7] block/curl: check error return of curl_global_init() Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 6/7] block/curl: fix minor memory leaks Jeff Cody
2017-08-08 13:39 ` [Qemu-devel] [PATCH for-2.11 7/7] block/curl: code cleanup to comply with coding style Jeff Cody
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.