diff mbox

virtio: Tell the user what went wrong when event_notifier_init failed

Message ID 1467065523-13881-1-git-send-email-thuth@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Thomas Huth June 27, 2016, 10:12 p.m. UTC
event_notifier_init() can fail in real life, for example when there
are not enough open file handles available (EMFILE) when using a lot
of devices. So instead of leaving the average user with a cryptic
error number only, print out a proper error message with strerror()
instead, so that the user has a better way to figure out what is
going on and that using "ulimit -n" might help here for example.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 hw/virtio/virtio-bus.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Eric Blake June 27, 2016, 10:38 p.m. UTC | #1
On 06/27/2016 04:12 PM, Thomas Huth wrote:
> event_notifier_init() can fail in real life, for example when there
> are not enough open file handles available (EMFILE) when using a lot
> of devices. So instead of leaving the average user with a cryptic
> error number only, print out a proper error message with strerror()
> instead, so that the user has a better way to figure out what is
> going on and that using "ulimit -n" might help here for example.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  hw/virtio/virtio-bus.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c
> index 1313760..08e38fb 100644
> --- a/hw/virtio/virtio-bus.c
> +++ b/hw/virtio/virtio-bus.c
> @@ -164,7 +164,8 @@ static int set_host_notifier_internal(DeviceState *proxy, VirtioBusState *bus,
>      if (assign) {
>          r = event_notifier_init(notifier, 1);
>          if (r < 0) {
> -            error_report("%s: unable to init event notifier: %d", __func__, r);
> +            error_report("%s: unable to init event notifier: %s (%d)",
> +                         __func__, strerror(-r), r);

Yet another case where we have error_report(...strerror()), which argues
that someday we should add error_report_errno() to match
error_setg_errno().  But not your fault.

Reviewed-by: Eric Blake <eblake@redhat.com>
Cornelia Huck June 28, 2016, 7:44 a.m. UTC | #2
On Tue, 28 Jun 2016 00:12:03 +0200
Thomas Huth <thuth@redhat.com> wrote:

> event_notifier_init() can fail in real life, for example when there
> are not enough open file handles available (EMFILE) when using a lot
> of devices. So instead of leaving the average user with a cryptic
> error number only, print out a proper error message with strerror()
> instead, so that the user has a better way to figure out what is
> going on and that using "ulimit -n" might help here for example.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  hw/virtio/virtio-bus.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Thomas Huth July 14, 2016, 12:41 p.m. UTC | #3
On 28.06.2016 00:12, Thomas Huth wrote:
> event_notifier_init() can fail in real life, for example when there
> are not enough open file handles available (EMFILE) when using a lot
> of devices. So instead of leaving the average user with a cryptic
> error number only, print out a proper error message with strerror()
> instead, so that the user has a better way to figure out what is
> going on and that using "ulimit -n" might help here for example.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  hw/virtio/virtio-bus.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c
> index 1313760..08e38fb 100644
> --- a/hw/virtio/virtio-bus.c
> +++ b/hw/virtio/virtio-bus.c
> @@ -164,7 +164,8 @@ static int set_host_notifier_internal(DeviceState *proxy, VirtioBusState *bus,
>      if (assign) {
>          r = event_notifier_init(notifier, 1);
>          if (r < 0) {
> -            error_report("%s: unable to init event notifier: %d", __func__, r);
> +            error_report("%s: unable to init event notifier: %s (%d)",
> +                         __func__, strerror(-r), r);
>              return r;
>          }
>          virtio_queue_set_host_notifier_fd_handler(vq, true, set_handler);
> 

ping?

 Thomas
Thomas Huth Sept. 2, 2016, 10:09 p.m. UTC | #4
On 14.07.2016 14:41, Thomas Huth wrote:
> On 28.06.2016 00:12, Thomas Huth wrote:
>> event_notifier_init() can fail in real life, for example when there
>> are not enough open file handles available (EMFILE) when using a lot
>> of devices. So instead of leaving the average user with a cryptic
>> error number only, print out a proper error message with strerror()
>> instead, so that the user has a better way to figure out what is
>> going on and that using "ulimit -n" might help here for example.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>  hw/virtio/virtio-bus.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c
>> index 1313760..08e38fb 100644
>> --- a/hw/virtio/virtio-bus.c
>> +++ b/hw/virtio/virtio-bus.c
>> @@ -164,7 +164,8 @@ static int set_host_notifier_internal(DeviceState *proxy, VirtioBusState *bus,
>>      if (assign) {
>>          r = event_notifier_init(notifier, 1);
>>          if (r < 0) {
>> -            error_report("%s: unable to init event notifier: %d", __func__, r);
>> +            error_report("%s: unable to init event notifier: %s (%d)",
>> +                         __func__, strerror(-r), r);
>>              return r;
>>          }
>>          virtio_queue_set_host_notifier_fd_handler(vq, true, set_handler);
>>
> 
> ping?

ping^2

 Thomas
diff mbox

Patch

diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c
index 1313760..08e38fb 100644
--- a/hw/virtio/virtio-bus.c
+++ b/hw/virtio/virtio-bus.c
@@ -164,7 +164,8 @@  static int set_host_notifier_internal(DeviceState *proxy, VirtioBusState *bus,
     if (assign) {
         r = event_notifier_init(notifier, 1);
         if (r < 0) {
-            error_report("%s: unable to init event notifier: %d", __func__, r);
+            error_report("%s: unable to init event notifier: %s (%d)",
+                         __func__, strerror(-r), r);
             return r;
         }
         virtio_queue_set_host_notifier_fd_handler(vq, true, set_handler);