From ab81d09a710242ab61001ef5e8ffd321725b47a7 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Thu, 4 Jun 2009 15:05:23 +0100 Subject: [PATCH] Fix RHBZ#503169 comment 13 (regression) and add a regression test. --- daemon/command.c | 11 +++++++---- regressions/Makefile.am | 1 + regressions/rhbz503169c13.sh | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 4 deletions(-) create mode 100755 regressions/rhbz503169c13.sh diff --git a/daemon/command.c b/daemon/command.c index 1a9bebb..46a265c 100644 --- a/daemon/command.c +++ b/daemon/command.c @@ -31,7 +31,7 @@ do_command (char * const * const argv) { char *out, *err; int r; - int proc_ok, dev_ok, sys_ok; + int proc_ok, dev_ok, dev_pts_ok, sys_ok; /* We need a root filesystem mounted to do this. */ NEED_ROOT (NULL); @@ -53,11 +53,13 @@ do_command (char * const * const argv) * We deliberately allow these commands to fail silently, BUT * if a mount fails, don't unmount the corresponding mount. */ - r = command (NULL, NULL, "mount", "--rbind", "/dev", "/sysroot/dev", NULL); + r = command (NULL, NULL, "mount", "--bind", "/dev", "/sysroot/dev", NULL); dev_ok = r != -1; - r = command (NULL, NULL, "mount", "--rbind", "/proc", "/sysroot/proc", NULL); + r = command (NULL, NULL, "mount", "--bind", "/dev/pts", "/sysroot/dev/pts", NULL); + dev_pts_ok = r != -1; + r = command (NULL, NULL, "mount", "--bind", "/proc", "/sysroot/proc", NULL); proc_ok = r != -1; - r = command (NULL, NULL, "mount", "--rbind", "/sys", "/sysroot/sys", NULL); + r = command (NULL, NULL, "mount", "--bind", "/sys", "/sysroot/sys", NULL); sys_ok = r != -1; CHROOT_IN; @@ -66,6 +68,7 @@ do_command (char * const * const argv) if (sys_ok) command (NULL, NULL, "umount", "/sysroot/sys", NULL); if (proc_ok) command (NULL, NULL, "umount", "/sysroot/proc", NULL); + if (dev_pts_ok) command (NULL, NULL, "umount", "/sysroot/dev/pts", NULL); if (dev_ok) command (NULL, NULL, "umount", "/sysroot/dev", NULL); if (r == -1) { diff --git a/regressions/Makefile.am b/regressions/Makefile.am index 0896584..78ecfaa 100644 --- a/regressions/Makefile.am +++ b/regressions/Makefile.am @@ -23,6 +23,7 @@ TESTS = \ rhbz503169c10.sh \ + rhbz503169c13.sh \ test-bootbootboot.sh EXTRA_DIST = \ diff --git a/regressions/rhbz503169c13.sh b/regressions/rhbz503169c13.sh new file mode 100755 index 0000000..71e29ce --- /dev/null +++ b/regressions/rhbz503169c13.sh @@ -0,0 +1,44 @@ +#!/bin/sh - +# libguestfs +# Copyright (C) 2009 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# Regression test for: +# https://bugzilla.redhat.com/show_bug.cgi?id=503169#c13 +# +# The unmount-all command will give this error: +# libguestfs: error: umount: /sysroot/dev: umount: /sysroot/dev: device is busy. +# (In some cases useful info about processes that use +# the device is found by lsof(8) or fuser(1)) + +set -e + +rm -f test1.img +dd if=/dev/zero of=test1.img bs=1024k count=10 + +export LIBGUESTFS_PATH=../appliance + +../fish/guestfish -a test1.img <