mkfs: Force mke2fs to create a filesystem even on raw IDE device (RHBZ#690819).
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 25 Mar 2011 14:34:31 +0000 (14:34 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 25 Mar 2011 14:34:31 +0000 (14:34 +0000)
daemon/mkfs.c
regressions/Makefile.am
regressions/rhbz690819.sh [new file with mode: 0755]

index 07eefb2..ea9fd7f 100644 (file)
@@ -1,5 +1,5 @@
 /* libguestfs - the guestfsd daemon
- * Copyright (C) 2009 Red Hat Inc.
+ * Copyright (C) 2009-2011 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
@@ -41,10 +41,26 @@ do_mkfs_opts (const char *fstype, const char *device, int blocksize, const char
   int r;
   char *err;
 
-  argv[i++] = "mkfs";
+  /* For ext2/3/4 run the mke2fs program directly.  This is because
+   * the mkfs program "eats" some options, in particular the -F
+   * option.
+   */
+  if (STREQ (fstype, "ext2") || STREQ (fstype, "ext3") ||
+      STREQ (fstype, "ext4"))
+    argv[i++] = "mke2fs";
+  else
+    argv[i++] = "mkfs";
+
   argv[i++] = "-t";
   argv[i++] = fstype;
 
+  /* Force mke2fs to create a filesystem, even if it thinks it
+   * shouldn't (RHBZ#690819).
+   */
+  if (STREQ (fstype, "ext2") || STREQ (fstype, "ext3") ||
+      STREQ (fstype, "ext4"))
+    argv[i++] = "-F";
+
   /* mkfs.ntfs requires the -Q argument otherwise it writes zeroes
    * to every block and does bad block detection, neither of which
    * are useful behaviour for virtual devices.
index b01d3a5..9c181bd 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009 Red Hat Inc.
+# Copyright (C) 2009-2011 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
@@ -32,6 +32,7 @@ TESTS = \
        rhbz576879.sh \
        rhbz578407.sh \
        rhbz580246.sh \
+       rhbz690819.sh \
        test-add-domain.sh \
        test-both-ends-cancel.sh \
        test-cancellation-download-librarycancels.sh \
diff --git a/regressions/rhbz690819.sh b/regressions/rhbz690819.sh
new file mode 100755 (executable)
index 0000000..f4c10ed
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/bash -
+# libguestfs
+# Copyright (C) 2011 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.
+
+# https://bugzilla.redhat.com/show_bug.cgi?id=690819
+# mkfs fails creating a filesytem on a disk device when using a disk
+# with 'ide' interface
+
+set -e
+export LANG=C
+
+rm -f test.img
+
+truncate -s 100M test.img
+
+../fish/guestfish <<EOF
+add-drive-with-if test.img ide
+run
+mkfs ext3 /dev/sda
+mount /dev/sda /
+EOF
+
+rm -f test.img