+
+ /* 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.
+ */
+ if (STREQ (fstype, "ntfs"))
+ argv[i++] = "-Q";
+
+ /* mkfs.reiserfs produces annoying interactive prompts unless you
+ * tell it to be quiet.
+ */
+ if (STREQ (fstype, "reiserfs"))
+ argv[i++] = "-f";
+
+ /* Same for JFS. */
+ if (STREQ (fstype, "jfs"))
+ argv[i++] = "-f";
+
+ /* For GFS, GFS2, assume a single node. */
+ if (STREQ (fstype, "gfs") || STREQ (fstype, "gfs2")) {
+ argv[i++] = "-p";
+ argv[i++] = "lock_nolock";
+ /* The man page says this is default, but it doesn't seem to be: */
+ argv[i++] = "-j";
+ argv[i++] = "1";
+ /* Don't ask questions: */
+ argv[i++] = "-O";