Call blockdev --rereadpt after sfdisk commands.
authorRichard W.M. Jones <rjones@redhat.com>
Wed, 22 Sep 2010 15:35:52 +0000 (16:35 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Wed, 22 Sep 2010 15:35:52 +0000 (16:35 +0100)
On fast machines sfdisk has some sort of race where it
fails to re-read the partition table it has just created
(it's not clear if this is a race in sfdisk, the kernel or
some other component).

This commit works around the problem by calling
blockdev --rereadpt after sfdisk operations, which
experience shows is enough to stop the problem from
happening.

daemon/sfdisk.c

index 20d7dc8..99a18bb 100644 (file)
@@ -91,7 +91,19 @@ sfdisk (const char *device, int n, int cyls, int heads, int sectors,
 
   udev_settle ();
 
 
   udev_settle ();
 
-  return 0;
+  /* sfdisk sometimes fails on fast machines with:
+   *
+   * Re-reading the partition table ...
+   * BLKRRPART: Device or resource busy
+   * The command to re-read the partition table failed.
+   * Run partprobe(8), kpartx(8) or reboot your system now,
+   * before using mkfs
+   *
+   * Unclear if this is a bug in sfdisk or the kernel or some
+   * other component.  In any case, reread the partition table
+   * unconditionally here.
+   */
+  return do_blockdev_rereadpt (device);
 }
 
 int
 }
 
 int