diff mbox series

[5/5] qemu-nbd: handle dup2() error when qemu-nbd finished setup process

Message ID 20230717145544.194786-6-den@openvz.org (mailing list archive)
State New, archived
Headers show
Series qemu-nbd: fix regression with qemu-nbd --fork run over ssh | expand

Commit Message

Denis V. Lunev July 17, 2023, 2:55 p.m. UTC
Fail on error, we are in trouble.

Signed-off-by: Denis V. Lunev <den@openvz.org>
CC: Eric Blake <eblake@redhat.com>
CC: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
 qemu-nbd.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

Comments

Eric Blake July 18, 2023, 5:52 p.m. UTC | #1
On Mon, Jul 17, 2023 at 04:55:44PM +0200, Denis V. Lunev wrote:
> Fail on error, we are in trouble.
> 
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> CC: Eric Blake <eblake@redhat.com>
> CC: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
> ---
>  qemu-nbd.c | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/qemu-nbd.c b/qemu-nbd.c
> index f27613cb57..cd0e965705 100644
> --- a/qemu-nbd.c
> +++ b/qemu-nbd.c
> @@ -323,7 +323,12 @@ static void *nbd_client_thread(void *arg)
>                  opts->device, srcpath);
>      } else {
>          /* Close stderr so that the qemu-nbd process exits.  */
> -        dup2(STDOUT_FILENO, STDERR_FILENO);
> +        int err = dup2(STDOUT_FILENO, STDERR_FILENO);
> +        if (err < 0) {

Shorter to drop the temporary variable, and just do:

   if (dup2(...) < 0) {

> +            error_report("Could not set stderr to /dev/null: %s",
> +                         strerror(errno));
> +            exit(EXIT_FAILURE);
> +        }
>      }

Either way,
Reviewed-by: Eric Blake <eblake@redhat.com>
diff mbox series

Patch

diff --git a/qemu-nbd.c b/qemu-nbd.c
index f27613cb57..cd0e965705 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -323,7 +323,12 @@  static void *nbd_client_thread(void *arg)
                 opts->device, srcpath);
     } else {
         /* Close stderr so that the qemu-nbd process exits.  */
-        dup2(STDOUT_FILENO, STDERR_FILENO);
+        int err = dup2(STDOUT_FILENO, STDERR_FILENO);
+        if (err < 0) {
+            error_report("Could not set stderr to /dev/null: %s",
+                         strerror(errno));
+            exit(EXIT_FAILURE);
+        }
     }
 
     if (nbd_client(fd) < 0) {
@@ -1171,7 +1176,12 @@  int main(int argc, char **argv)
     }
 
     if (fork_process) {
-        dup2(STDOUT_FILENO, STDERR_FILENO);
+        ret = dup2(STDOUT_FILENO, STDERR_FILENO);
+        if (ret < 0) {
+            error_report("Could not set stderr to /dev/null: %s",
+                         strerror(errno));
+            exit(EXIT_FAILURE);
+        }
     }
 
     state = RUNNING;