From 8d64c7cf4265ae853fd05a99b87e260c98c2b34c Mon Sep 17 00:00:00 2001 From: Lucian Petrut Date: Fri, 29 Jan 2021 13:38:19 +0000 Subject: [PATCH] rbd: propagate rbd-wnbd errors This change updates the "rbd device" commands, propagating rbd-wnbd.exe exit codes. Signed-off-by: Lucian Petrut --- src/common/win32/SubProcess.cc | 4 +++- src/tools/rbd/action/Wnbd.cc | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/common/win32/SubProcess.cc b/src/common/win32/SubProcess.cc index 565cb47f0faae..ce6b851e029b1 100644 --- a/src/common/win32/SubProcess.cc +++ b/src/common/win32/SubProcess.cc @@ -142,18 +142,20 @@ int SubProcess::join() { close(stdout_pipe_in_fd); close(stderr_pipe_in_fd); - DWORD status = 0; + int status = 0; if (WaitForSingleObject(proc_handle, INFINITE) != WAIT_FAILED) { if (!GetExitCodeProcess(proc_handle, &status)) { errstr << cmd << ": Could not get exit code: " << pid << ". Error code: " << GetLastError(); + status = -ECHILD; } else if (status) { errstr << cmd << ": exit status: " << status; } } else { errstr << cmd << ": Waiting for child process failed: " << pid << ". Error code: " << GetLastError(); + status = -ECHILD; } close_h(proc_handle); diff --git a/src/tools/rbd/action/Wnbd.cc b/src/tools/rbd/action/Wnbd.cc index 41b331a9e3c04..4e5b20b61b03c 100644 --- a/src/tools/rbd/action/Wnbd.cc +++ b/src/tools/rbd/action/Wnbd.cc @@ -53,9 +53,11 @@ static int call_wnbd_cmd(const po::variables_map &vm, if (process.spawn()) { std::cerr << "rbd: failed to run rbd-wnbd: " << process.err() << std::endl; return -EINVAL; - } else if (process.join()) { + } + int exit_code = process.join(); + if (exit_code) { std::cerr << "rbd: rbd-wnbd failed with error: " << process.err() << std::endl; - return -EINVAL; + return exit_code; } return 0; -- 2.39.5