Code cleanup and minor fixes (for 2.11)
v3 cover Code cleanup and minor fixes (for 2.11)
Changes from v2 -> v3:
Patch 1: Return -EIO for ssh_state_init() (Thanks Eric) Patch 4: fixed missed line (Thanks Eric)
Patch 7: fixed opaque pointer assignment (Thanks Eric)
git-backport-diff -r master.. -u 81fb084
001/7:[0007] [FC] 'block/ssh: don't call libssh2_init() in block_init()' 002/7:[----] [--] 'block/ssh: make compliant with coding guidelines' 003/7:[----] [--] 'block/sheepdog: remove spurious NULL check' 004/7:[0010] [FC] 'block/sheepdog: code beautification' 005/7:[----] [--] 'block/curl: check error return of curl_global_init()' 006/7:[----] [--] 'block/curl: fix minor memory leaks' 007/7:[0002] [FC] 'block/curl: code cleanup to comply with coding style'
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 | 166 +++++++++++++++++++++++++++---------------------------- block/ssh.c | 69 ++++++++++++++--------- 3 files changed, 197 insertions(+), 162 deletions(-)
Signature · 1 line
2.9.5
PATCH v3 1/7 block/ssh: don't call libssh2_init() in block_init()
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.
--- block/ssh.c | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-)
block/ssh.c +26 -11
@@ -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)
@@ -773,7 +789,9 @@ static int ssh_file_open(BlockDriverState *bs, QDict *options, int bdrv_flags,int ret;int ssh_flags; -ssh_state_init (s); +if (ssh_state_init (s, errp)) { +return -EIO ; + } ssh_flags =LIBSSH2_FXF_READ ;if (bdrv_flags &BDRV_O_RDWR ) {
@@ -821,8 +839,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 +1236,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); }
Signature · 1 line
2.9.5
Re: [Qemu-devel] [PATCH v3 1/7] block/ssh: don't call libssh2_init() in block_init()
Quoted 10 lines · Jeff Cody
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 <[email protected]>--- block/ssh.c | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-)
block/ssh.c typedef struct BDRVSSHState { · line 95
Quoted 8 lines
block/ssh.c +7
-0+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);
Maybe s/with %d/with status %d/
Quoted 1 line
+ return ret;
This is returning a non-zero value, but not necessarily a negative errno...
block/ssh.c static int ssh_create(const char *filename, QemuOpts *opts, Error **errp) · line 847
Quoted 11 lines
block/ssh.c +5
-1@@ -821,8 +839,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;
...but this function wants to return a negative errno. I think you can rewrite this to:
if (ssh_state_init(&s, errp)) {
return -EIO;
}and skip out on local_err.
Signature · 3 lines
Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
Re: [Qemu-devel] [PATCH v3 1/7] block/ssh: don't call libssh2_init() in block_init()
In reply to Jeff CodyQuoted 31 lines · Jeff Cody
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 <[email protected]>--- block/ssh.c | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-)block/ssh.c +11
-1@@ -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; + }
block/ssh.c typedef struct BDRVSSHState { · line 107
Quoted 10 lines
block/ssh.c +6
-0+ ssh_libinit_called = true; + } + +memset (s,0 ,sizeof *s); s->sock =-1 ; s->offset =-1 ;qemu_co_mutex_init (&s->lock); + +return 0 ;
Is this thread safe? Is there a case where multiple ssh URL opens could race off against each other and we could end up calling libssh2_init in parallel? (According to the libssh2_init documentation, the function is not thread-safe so should not be called in parallel on multiple threads)
Rich.
Quoted 46 lines
block/ssh.c +9
-10}static void ssh_state_free (BDRVSSHState *s)@@ -773,7 +789,9 @@ static int ssh_file_open(BlockDriverState *bs, QDict *options, int bdrv_flags,int ret;int ssh_flags; -ssh_state_init (s); +if (ssh_state_init (s, errp)) { +return -EIO ; + } ssh_flags =LIBSSH2_FXF_READ ;if (bdrv_flags &BDRV_O_RDWR ) {@@ -821,8 +839,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 +1236,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); }Signature · 1 line
2.9.5
Signature · 4 lines
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html
PATCH v3 2/7 block/ssh: make compliant with coding guidelines
In reply to Jeff Cody--- block/ssh.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-)
block/ssh.c +18 -14
@@ -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 ;
@@ -860,8 +863,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;
@@ -869,7 +872,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" );
@@ -1108,7 +1111,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; }
@@ -1122,8 +1125,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 ;
Signature · 1 line
2.9.5
Re: [Qemu-devel] [Qemu-block] [PATCH v3 2/7] block/ssh: make compliant with coding guidelines
Quoted 2 lines · Jeff Cody
Signed-off-by Jeff Cody <[email protected]>Reviewed-by Eric Blake <[email protected]>
Quoted 121 lines
---
block/ssh.c| 32 ++++++++++++++++++--------------1 file changed, 18 insertions(+), 14 deletions(-)block/ssh.c +18
-14@@ -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 ;@@ -860,8 +863,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;@@ -869,7 +872,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" );@@ -1108,7 +1111,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; }@@ -1122,8 +1125,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 ;Signature · 1 line
2.9.5
Re: [Qemu-devel] [PATCH v3 2/7] block/ssh: make compliant with coding guidelines
In reply to Jeff CodyQuoted 2 lines · Jeff Cody
Signed-off-by Jeff Cody <[email protected]>Reviewed-by Eric Blake <[email protected]>
This one is just simple coding style fixes, so:
Rich.
Quoted 118 lines
block/ssh.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-)block/ssh.c +18
-14@@ -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 ;@@ -860,8 +863,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;@@ -869,7 +872,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" );@@ -1108,7 +1111,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; }@@ -1122,8 +1125,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 ;Signature · 1 line
2.9.5
Signature · 5 lines
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-df lists disk usage of guests without needing to install any software inside the virtual machine. Supports Linux and Windows. http://people.redhat.com/~rjones/virt-df/
PATCH v3 3/7 block/sheepdog: remove spurious NULL check
In reply to Jeff Cody'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.
--- block/sheepdog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
block/sheepdog.c +1 -1
@@ -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;
Signature · 1 line
2.9.5
Re: [Qemu-devel] [Qemu-block] [PATCH v3 3/7] block/sheepdog: remove spurious NULL check
Quoted 5 lines · Jeff Cody
'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 <[email protected]>Reviewed-by Eric Blake <[email protected]>
Quoted 21 lines
---
block/sheepdog.c| 2 +-1 file changed, 1 insertion(+), 1 deletion(-)block/sheepdog.c +1
-1@@ -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;Signature · 1 line
2.9.5
PATCH v3 4/7 block/sheepdog: code beautification
In reply to Jeff CodyNo functional changes, just whitespace manipulation.
--- block/sheepdog.c | 164 +++++++++++++++++++++++++++---------------------------- 1 file changed, 82 insertions(+), 82 deletions(-)
block/sheepdog.c +82 -82
@@ -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, - .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+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_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 )
Signature · 1 line
2.9.5
Re: [Qemu-devel] [Qemu-block] [PATCH v3 4/7] block/sheepdog: code beautification
Quoted 4 lines · Jeff Cody
No functional changes, just whitespace manipulation.
Signed-off-by Jeff Cody <[email protected]>Reviewed-by Eric Blake <[email protected]>
Quoted 214 lines
---
block/sheepdog.c| 164 +++++++++++++++++++++++++++----------------------------1 file changed, 82 insertions(+), 82 deletions(-)block/sheepdog.c +82
-82@@ -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, - .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+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_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 )Signature · 1 line
2.9.5
PATCH v3 5/7 block/curl: check error return of curl_global_init()
In reply to Jeff CodyIf 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
--- block/curl.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-)
block/curl.c +12 -6
@@ -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);
Signature · 1 line
2.9.5
Re: [Qemu-devel] [Qemu-block] [PATCH v3 5/7] block/curl: check error return of curl_global_init()
Quoted 11 lines · Jeff Cody
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 boolSigned-off-by Jeff Cody <[email protected]>Reviewed-by Eric Blake <[email protected]>
Quoted 58 lines
---
block/curl.c| 18 ++++++++++++------1 file changed, 12 insertions(+), 6 deletions(-)block/curl.c +12
-6@@ -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);Signature · 1 line
2.9.5
Re: [Qemu-devel] [PATCH v3 5/7] block/curl: check error return of curl_global_init()
In reply to Jeff CodyQuoted 11 lines · Jeff Cody
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 boolSigned-off-by Jeff Cody <[email protected]>Reviewed-by Eric Blake <[email protected]>
This is just a simple evolution of the previous code, so:
Rich.
Quoted 55 lines
block/curl.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-)block/curl.c +12
-6@@ -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);Signature · 1 line
2.9.5
Signature · 5 lines
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW
PATCH v3 6/7 block/curl: fix minor memory leaks
In reply to Jeff Cody--- block/curl.c | 6 ++++++ 1 file changed, 6 insertions(+)
block/curl.c +6 -0
@@ -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)
Signature · 1 line
2.9.5
Re: [Qemu-devel] [PATCH v3 6/7] block/curl: fix minor memory leaks
Quoted 4 lines · Jeff Cody
Signed-off-by Jeff Cody <[email protected]>--- block/curl.c | 6 ++++++ 1 file changed, 6 insertions(+)
Quoted 26 lines
block/curl.c +6
-0@@ -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)
Signature · 3 lines
Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
Re: [Qemu-devel] [PATCH v3 6/7] block/curl: fix minor memory leaks
In reply to Jeff CodyHi Jeff,
On 11/07/2017 07:27 PM, Jeff Cody wrote:
"Missed in 1bff9606429."
Quoted 1 line
Signed-off-by Jeff Cody <[email protected]>
Quoted 29 lines
--- block/curl.c | 6 ++++++ 1 file changed, 6 insertions(+)block/curl.c +6
-0@@ -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)
Re: [Qemu-devel] [PATCH v3 6/7] block/curl: fix minor memory leaks
In reply to Jeff CodyQuoted 20 lines · Jeff Cody
Signed-off-by Jeff Cody <[email protected]>--- block/curl.c | 6 ++++++ 1 file changed, 6 insertions(+)block/curl.c +3
-0@@ -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 ; }
block/curl.c static void curl_close(BlockDriverState *bs) · line 963
Quoted 6 lines
block/curl.c +3
-0@@ -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);
username & proxyusername are allocated with g_strdup and so should obviously be freed.
proxypassword is returned by qcrypto_secret_lookup_as_utf8, and it's not clear to me if we should free that or not. However examining the code of qcrypto_secret_lookup it looks as if this string is allocated by g_new0, which would indicate that it should also be freed.
Therefore:
Rich.
Signature · 5 lines
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW
PATCH v3 7/7 block/curl: code cleanup to comply with coding style
In reply to Jeff CodyThis 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.
--- block/curl.c | 100 +++++++++++++++++++++++++++++++---------------------------- 1 file changed, 52 insertions(+), 48 deletions(-)
block/curl.c +52 -48
@@ -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 = 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) {
Signature · 1 line
2.9.5
Re: [Qemu-devel] [Qemu-block] [PATCH v3 7/7] block/curl: code cleanup to comply with coding style
Hi Jeff,
While I'm relatively new to this community, I do have some comments about the styling in this file.
I don't see anything in the CODING_STYLE file that tells me I'm wrong here, but it's certainly possible...
More inline.
Quoted 17 lines · Jeff Cody
This addresses non-functional changes to help
curl.cbetter 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 <[email protected]>Reviewed-by Eric Blake <[email protected]>---
block/curl.c| 100 +++++++++++++++++++++++++++++++----------------------------1 file changed, 52 insertions(+), 48 deletions(-)block/curl.c +0
-0
block/curl.c line 38
Quoted 9 lines
block/curl.c +4
-2@@ -32,8 +32,10 @@#include <curl/curl.h> #include "qemu/cutils.h" -// #define DEBUG_CURL -// #define DEBUG_VERBOSE +/* +#define DEBUG_CURL +#define DEBUG_VERBOSE +*/
Is it not more common to use the style:
/*
* text
*/
This is visible in almost every file at the top, where the Copyright and License is.
Quoted 78 lines
block/curl.c +26
-27#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 ;
block/curl.c static size_t curl_header_cb(void *ptr, size_t size, size_t nmemb, void *opaque) · line 239
Quoted 5 lines
block/curl.c +1
-1@@ -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 = opaque;
Not sure about this one - while it may not be strictly necessary to do the casting, from a readability point of view it is helpful to see the cast - possibly with the outer brackets removed:
CURLState *s = (CURLState*)opaque;
Quoted 110 lines
block/curl.c +18
-15size_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; }
block/curl.c static void curl_setup_preadv(BlockDriverState *bs, CURLAIOCB *acb) · line 884
Quoted 7 lines
block/curl.c +2
-2@@ -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. */
Please don't do a multi-line comment like this, it is much more obvious that the second line is a comment if you use the more normal format of as outlined earlier by me.
Thanks,
Darren.
Re: [Qemu-devel] [Qemu-block] [PATCH v3 7/7] block/curl: code cleanup to comply with coding style
Quoted 5 lines · Darren Kenny
Hi Jeff,
While I'm relatively new to this community, I do have some comments about the styling in this file.
Quoted 8 lines
I don't see anything in the
CODING_STYLEfile that tells me I'm wrong here, but it's certainly possible...More inline.
block/curl.c line 36
Quoted 2 lines
block/curl.c +0
-2-// #define DEBUG_CURL -// #define DEBUG_VERBOSE
This is definitely against style (checkpatch.pl flags it),
Quoted 5 lines
block/curl.c line 38
Quoted 4 lines
block/curl.c +4
-0+/* +#define DEBUG_CURL +#define DEBUG_VERBOSE +*/
while you are correct that this is not quite usual style.
Quoted 5 lines
Is it not more common to use the style:
/*
* text
*/
But, since checkpatch.pl doesn't flag it, and since it is easier to remove the leading and trailing /* and */ to enable the debug #defines (compared to editing every single line of the comment), I don't see a problem with the style chosen here.
Quoted 13 lines
Quoted 8 lines
(quoted diff) +0
-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_tcurl_read_cb(void *ptr, size_t size, size_t nmemb, void *opaque)
{
- CURLState *s = ((CURLState*)opaque);
+ CURLState *s = opaque;Not sure about this one - while it may not be strictly necessary to do the casting, from a readability point of view it is helpful to see the cast - possibly with the outer brackets removed:
Quoted 1 line
CURLState *s = (CURLState*)opaque;
I _am_ sure about it. The cast from void* is pointless (this is C, not C++), and this is one of the changes that Jeff specifically made in v3 that was not present in v2, because I requested that we lose the cast (in general, we try to avoid as many casts as possible).
Quoted 5 lines
Quoted 5 lines
block/curl.c +0
-0@@ -876,13 +880,13 @@ static void curl_setup_preadv(BlockDriverState *bs, CURLAIOCB *acb) qemu_mutex_lock(&s->mutex);
Quoted 8 lines
block/curl.c static void curl_setup_preadv(BlockDriverState *bs, CURLAIOCB *acb) · line 884
Quoted 4 lines
block/curl.c +2
-2- // 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. */ Please don't do a multi-line comment like this, it is much more obvious that the second line is a comment if you use the more normal format of as outlined earlier by me.
Indeed, while I don't mind the style used on the #define DEBUG_*, this one could be touched up to be more idiomatic.
Signature · 3 lines
Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
Re: [Qemu-devel] [Qemu-block] [PATCH v3 7/7] block/curl: code cleanup to comply with coding style
Quoted 27 lines · Eric Blake
Quoted 5 lines · Darren Kenny
Hi Jeff,
While I'm relatively new to this community, I do have some comments about the styling in this file.
Quoted 8 lines
I don't see anything in the
CODING_STYLEfile that tells me I'm wrong here, but it's certainly possible...More inline.
block/curl.c line 36
Quoted 2 lines
block/curl.c +0
-2-// #define DEBUG_CURL -// #define DEBUG_VERBOSE This is definitely against style (checkpatch.pl flags it),
Quoted 5 lines
block/curl.c line 38
Quoted 4 lines
block/curl.c +4
-0+/* +#define DEBUG_CURL +#define DEBUG_VERBOSE +*/ while you are correct that this is not quite usual style.
Quoted 2 lines
Is it not more common to use the style:
Quoted 9 lines
Quoted 3 lines
/*
* text
*/But, since checkpatch.pl doesn't flag it, and since it is easier to remove the leading and trailing /* and */ to enable the debug #defines (compared to editing every single line of the comment), I don't see a problem with the style chosen here.
If that is the purpose, maybe an #if 0 is more appropriate or #ifdef DEBUG, or similar.
Isn't the purpose of styling to be consistent? As such should we not be trying to use the multi-line style set out at the top of the file?
Quoted 14 lines
Quoted 14 lines
Quoted 9 lines
(quoted diff) +0
-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_tcurl_read_cb(void *ptr, size_t size, size_t nmemb, void *opaque)
{
- CURLState *s = ((CURLState*)opaque);
+ CURLState *s = opaque;Not sure about this one - while it may not be strictly necessary to do the casting, from a readability point of view it is helpful to see the cast - possibly with the outer brackets removed:
Quoted 6 lines
Quoted 1 line
CURLState *s = (CURLState*)opaque;
I _am_ sure about it. The cast from void* is pointless (this is C, not C++), and this is one of the changes that Jeff specifically made in v3 that was not present in v2, because I requested that we lose the cast (in general, we try to avoid as many casts as possible).
Fair enough.
Quoted 15 lines
Quoted 6 lines
Quoted 6 lines
block/curl.c +0
-0@@ -876,13 +880,13 @@ static void curl_setup_preadv(BlockDriverState *bs, CURLAIOCB *acb) qemu_mutex_lock(&s->mutex);Quoted 8 lines
block/curl.c static void curl_setup_preadv(BlockDriverState *bs, CURLAIOCB *acb) · line 884
Quoted 4 lines
block/curl.c +2
-2- // 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. */ Please don't do a multi-line comment like this, it is much more obvious that the second line is a comment if you use the more normal format of as outlined earlier by me.
Quoted 3 lines
Indeed, while I don't mind the style used on the #define DEBUG_*, this one could be touched up to be more idiomatic.
Thanks,
Darren.
Re: [Qemu-devel] [Qemu-block] [PATCH v3 7/7] block/curl: code cleanup to comply with coding style
Quoted 10 lines · Darren Kenny
Quoted 4 lines
But, since checkpatch.pl doesn't flag it, and since it is easier to remove the leading and trailing /* and */ to enable the debug #defines (compared to editing every single line of the comment), I don't see a problem with the style chosen here.
If that is the purpose, maybe an #if 0 is more appropriate or #ifdef DEBUG, or similar.
Isn't the purpose of styling to be consistent? As such should we not be trying to use the multi-line style set out at the top of the file?
Yes, and you're very welcome to submit a checkpatch.pl patch that warns about that comment style without * at the beginning of each line.
On the other hand, style should not get in the way, and the version that gets least in the way for debug #defines is //.
Paolo
Re: [Qemu-devel] [Qemu-block] [PATCH v3 7/7] block/curl: code cleanup to comply with coding style
In reply to Darren KennyQuoted 11 lines · Darren Kenny
block/curl.c line 38
Quoted 8 lines
block/curl.c +4
-2-// #define DEBUG_CURL -// #define DEBUG_VERBOSE +/* +#define DEBUG_CURL +#define DEBUG_VERBOSE +*/ Is it not more common to use the style:
Quoted 6 lines
/*
* text
*/This is visible in almost every file at the top, where the Copyright and License is.
The most common style in QEMU is probably
/* text
* more text
*/
But for DEBUG_* macros I think // are appropriate. checkpatch should still warn about them because DEBUG_* macros should be replaced by tracepoints; but unless we do that we should keep line comments.
Quoted 9 lines
block/curl.c static size_t curl_header_cb(void *ptr, size_t size, size_t nmemb, void *opaque) · line 239
Quoted 3 lines
block/curl.c +1
-1-CURLState *s = ((CURLState *)opaque); +CURLState *s = opaque;Not sure about this one - while it may not be strictly necessary to do the casting, from a readability point of view it is helpful to see the cast - possibly with the outer brackets removed:
CURLState *s = (CURLState*)opaque;
I think the most common idiom here is to omit the cast.
Quoted 8 lines
block/curl.c static void curl_setup_preadv(BlockDriverState *bs, CURLAIOCB *acb) · line 884
Quoted 4 lines
block/curl.c +2
-2-// 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. */ Please don't do a multi-line comment like this, it is much more obvious that the second line is a comment if you use the more normal format of as outlined earlier by me.
Agreed.
Paolo
Re: [Qemu-devel] [PATCH v3 7/7] block/curl: code cleanup to comply with coding style
In reply to Jeff CodyQuoted 8 lines · Jeff Cody
This addresses non-functional changes to help
curl.cbetter 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 <[email protected]>Reviewed-by Eric Blake <[email protected]>
As you say, just simple coding style fixes except for the single combined if statement. Therefore:
Rich.
Quoted 228 lines
block/curl.c | 100 +++++++++++++++++++++++++++++++---------------------------- 1 file changed, 52 insertions(+), 48 deletions(-)block/curl.c +52
-48@@ -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 = 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) {Signature · 1 line
2.9.5
Signature · 5 lines
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW
Quoted 26 lines · Jeff Cody
Changes from v2 -> v3:
Patch 1: Return
-EIOforssh_state_init()(Thanks Eric) Patch 4: fixed missed line (Thanks Eric)
Patch 7: fixed opaque pointer assignment (Thanks Eric)git-backport-diff -r master.. -u 81fb084
001/7:[0007] [FC] 'block/ssh: don't call
libssh2_init()inblock_init()' 002/7:[----] [--] 'block/ssh: make compliant with coding guidelines' 003/7:[----] [--] 'block/sheepdog: remove spurious NULL check' 004/7:[0010] [FC] 'block/sheepdog: code beautification' 005/7:[----] [--] 'block/curl: check error return ofcurl_global_init()' 006/7:[----] [--] 'block/curl: fix minor memory leaks' 007/7:[0002] [FC] 'block/curl: code cleanup to comply with coding style'Jeff Cody (7):
block/ssh: don't calllibssh2_init()inblock_init()block/ssh: make compliant with coding guidelines block/sheepdog: remove spurious NULL check block/sheepdog: code beautification block/curl: check error return ofcurl_global_init()block/curl: fix minor memory leaks block/curl: code cleanup to comply with coding style
Quoted 8 lines
block/curl.c | 124 +++++++++++++++++++++++------------------ block/sheepdog.c | 166 +++++++++++++++++++++++++++---------------------------- block/ssh.c | 69 ++++++++++++++--------- 3 files changed, 197 insertions(+), 162 deletions(-)Signature · 1 line
2.9.5
Applied the non-controversial patches 3-6 to my block branch:
git://github.com/codyprime/qemu-kvm-jtc block
-Jeff