qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCHv2] block/nfs: add knob to set readahead
@ 2014-06-24  8:52 Peter Lieven
  2014-06-24 16:04 ` Eric Blake
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Lieven @ 2014-06-24  8:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, stefanha, Peter Lieven, ronniesahlberg, pbonzini

upcoming libnfs will feature internal readahead support.
Add a knob to pass the optional readahead value as a URL
parameter.

This patch fixes also the incorrect usage of strncmp and
atoi.

Signed-off-by: Peter Lieven <pl@kamp.de>
---
v1->v2: use strtol instead of atoi [Eric]

 block/nfs.c |   16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/block/nfs.c b/block/nfs.c
index ec43201..9783483 100644
--- a/block/nfs.c
+++ b/block/nfs.c
@@ -309,12 +309,16 @@ static int64_t nfs_client_open(NFSClient *client, const char *filename,
                        qp->p[i].name);
             goto fail;
         }
-        if (!strncmp(qp->p[i].name, "uid", 3)) {
-            nfs_set_uid(client->context, atoi(qp->p[i].value));
-        } else if (!strncmp(qp->p[i].name, "gid", 3)) {
-            nfs_set_gid(client->context, atoi(qp->p[i].value));
-        } else if (!strncmp(qp->p[i].name, "tcp-syncnt", 10)) {
-            nfs_set_tcp_syncnt(client->context, atoi(qp->p[i].value));
+        if (!strcmp(qp->p[i].name, "uid")) {
+            nfs_set_uid(client->context, strtol(qp->p[i].value, NULL, 0));
+        } else if (!strcmp(qp->p[i].name, "gid")) {
+            nfs_set_gid(client->context, strtol(qp->p[i].value, NULL, 0));
+        } else if (!strcmp(qp->p[i].name, "tcp-syncnt")) {
+            nfs_set_tcp_syncnt(client->context, strtol(qp->p[i].value, NULL, 0));
+#ifdef LIBNFS_FEATURE_READAHEAD
+        } else if (!strcmp(qp->p[i].name, "readahead")) {
+            nfs_set_readahead(client->context, strtol(qp->p[i].value, NULL, 0));
+#endif
         } else {
             error_setg(errp, "Unknown NFS parameter name: %s",
                        qp->p[i].name);
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCHv2] block/nfs: add knob to set readahead
  2014-06-24  8:52 [Qemu-devel] [PATCHv2] block/nfs: add knob to set readahead Peter Lieven
@ 2014-06-24 16:04 ` Eric Blake
  2014-06-24 21:48   ` Peter Lieven
  0 siblings, 1 reply; 3+ messages in thread
From: Eric Blake @ 2014-06-24 16:04 UTC (permalink / raw)
  To: Peter Lieven, qemu-devel; +Cc: kwolf, pbonzini, ronniesahlberg, stefanha

[-- Attachment #1: Type: text/plain, Size: 2052 bytes --]

On 06/24/2014 02:52 AM, Peter Lieven wrote:
> upcoming libnfs will feature internal readahead support.
> Add a knob to pass the optional readahead value as a URL
> parameter.
> 
> This patch fixes also the incorrect usage of strncmp and
> atoi.
> 
> Signed-off-by: Peter Lieven <pl@kamp.de>
> ---
> v1->v2: use strtol instead of atoi [Eric]
> 
>  block/nfs.c |   16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/block/nfs.c b/block/nfs.c
> index ec43201..9783483 100644
> --- a/block/nfs.c
> +++ b/block/nfs.c
> @@ -309,12 +309,16 @@ static int64_t nfs_client_open(NFSClient *client, const char *filename,
>                         qp->p[i].name);
>              goto fail;
>          }
> -        if (!strncmp(qp->p[i].name, "uid", 3)) {
> -            nfs_set_uid(client->context, atoi(qp->p[i].value));
> -        } else if (!strncmp(qp->p[i].name, "gid", 3)) {
> -            nfs_set_gid(client->context, atoi(qp->p[i].value));
> -        } else if (!strncmp(qp->p[i].name, "tcp-syncnt", 10)) {
> -            nfs_set_tcp_syncnt(client->context, atoi(qp->p[i].value));
> +        if (!strcmp(qp->p[i].name, "uid")) {
> +            nfs_set_uid(client->context, strtol(qp->p[i].value, NULL, 0));

If you're going to use strtol, use it correctly.  You have to pre-set
errno, then check that something got parsed, that errno was not changed,
and that no unexpected suffix remains.  Better is using a wrapper that
already makes the parsing sane; such as parse_uint() from util/cutils.c.
 That is, swapping atoi() with a raw strtol() with no additional error
checking is not fixing any of the bugs inherent in the fact that atoi()
cannot detect overflow in user input.

At this point, I'd rather see this split into two patches - one that
fixes the atoi() usage, and another that adds readahead support - rather
than trying to cram two things in one commit.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCHv2] block/nfs: add knob to set readahead
  2014-06-24 16:04 ` Eric Blake
@ 2014-06-24 21:48   ` Peter Lieven
  0 siblings, 0 replies; 3+ messages in thread
From: Peter Lieven @ 2014-06-24 21:48 UTC (permalink / raw)
  To: Eric Blake, qemu-devel; +Cc: kwolf, pbonzini, ronniesahlberg, stefanha

Am 24.06.2014 18:04, schrieb Eric Blake:
> On 06/24/2014 02:52 AM, Peter Lieven wrote:
>> upcoming libnfs will feature internal readahead support.
>> Add a knob to pass the optional readahead value as a URL
>> parameter.
>>
>> This patch fixes also the incorrect usage of strncmp and
>> atoi.
>>
>> Signed-off-by: Peter Lieven <pl@kamp.de>
>> ---
>> v1->v2: use strtol instead of atoi [Eric]
>>
>>  block/nfs.c |   16 ++++++++++------
>>  1 file changed, 10 insertions(+), 6 deletions(-)
>>
>> diff --git a/block/nfs.c b/block/nfs.c
>> index ec43201..9783483 100644
>> --- a/block/nfs.c
>> +++ b/block/nfs.c
>> @@ -309,12 +309,16 @@ static int64_t nfs_client_open(NFSClient *client, const char *filename,
>>                         qp->p[i].name);
>>              goto fail;
>>          }
>> -        if (!strncmp(qp->p[i].name, "uid", 3)) {
>> -            nfs_set_uid(client->context, atoi(qp->p[i].value));
>> -        } else if (!strncmp(qp->p[i].name, "gid", 3)) {
>> -            nfs_set_gid(client->context, atoi(qp->p[i].value));
>> -        } else if (!strncmp(qp->p[i].name, "tcp-syncnt", 10)) {
>> -            nfs_set_tcp_syncnt(client->context, atoi(qp->p[i].value));
>> +        if (!strcmp(qp->p[i].name, "uid")) {
>> +            nfs_set_uid(client->context, strtol(qp->p[i].value, NULL, 0));
> If you're going to use strtol, use it correctly.  You have to pre-set
> errno, then check that something got parsed, that errno was not changed,
> and that no unexpected suffix remains.  Better is using a wrapper that
> already makes the parsing sane; such as parse_uint() from util/cutils.c.
>  That is, swapping atoi() with a raw strtol() with no additional error
> checking is not fixing any of the bugs inherent in the fact that atoi()
> cannot detect overflow in user input.

thanks for pointing that out. Actually I was grepping for strtoul in the
qemu source and found it in several places (also with no error checking).
I will change that.

>
> At this point, I'd rather see this split into two patches - one that
> fixes the atoi() usage, and another that adds readahead support - rather
> than trying to cram two things in one commit.
>
Right I will split that up.

Thanks for your comments,
Peter

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-06-24 21:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-24  8:52 [Qemu-devel] [PATCHv2] block/nfs: add knob to set readahead Peter Lieven
2014-06-24 16:04 ` Eric Blake
2014-06-24 21:48   ` Peter Lieven

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).