When qemu-nbd becomes a daemon it calls daemon(3) with nochdir=0, so daemon(3) changes current directory to /. But at this time, qemu-nbd did not open any user-specified files yet, so by changing current directory, all non-absolute paths becomes wrong. The solution is to pass nochdir=1 to daemon(3) function, and to chdir("/") after all init has been performed, before entering the main loop, -- just like a good daemon should do.
This patch is applicable for -stable. Signed-Off-By: Michael Tokarev <m...@tls.msk.ru> --- qemu-nbd.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/qemu-nbd.c b/qemu-nbd.c index e76c782..b1b5ae6 100644 --- a/qemu-nbd.c +++ b/qemu-nbd.c @@ -431,3 +431,3 @@ int main(int argc, char **argv) close(stderr_fd[0]); - ret = qemu_daemon(0, 0); + ret = qemu_daemon(1, 0); @@ -529,2 +529,8 @@ int main(int argc, char **argv) + /* now when the initialization is (almost) complete, chdir("/") + * to free any busy filesystems */ + if (chdir("/") < 0) { + err(EXIT_FAILURE, "Could not chdir to root directory"); + } + do { -- 1.7.2.5