X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=daemon%2Fsfdisk.c;h=99a18bb144e8ee0017f0c203005dc5d3eab9d3cf;hp=6d49387ac3529780ef2becd6b5e461bfb26dd996;hb=956fc5a3feacc970ea763697bf28fb686c875408;hpb=adf20c0c4d9f488d55254f54a79079b9cacbde8d diff --git a/daemon/sfdisk.c b/daemon/sfdisk.c index 6d49387..99a18bb 100644 --- a/daemon/sfdisk.c +++ b/daemon/sfdisk.c @@ -38,7 +38,7 @@ sfdisk (const char *device, int n, int cyls, int heads, int sectors, char buf[256]; int i; - strcpy (buf, "/sbin/sfdisk"); + strcpy (buf, "sfdisk"); if (n > 0) sprintf (buf + strlen (buf), " -N %d", n); @@ -72,13 +72,13 @@ sfdisk (const char *device, int n, int cyls, int heads, int sectors, fp = popen (buf, "w"); if (fp == NULL) { - reply_with_perror (buf); + reply_with_perror ("failed to open pipe: %s", buf); return -1; } for (i = 0; lines[i] != NULL; ++i) { if (fprintf (fp, "%s\n", lines[i]) < 0) { - reply_with_perror (buf); + reply_with_perror ("failed to write to pipe: %s", buf); pclose (fp); return -1; } @@ -91,7 +91,19 @@ sfdisk (const char *device, int n, int cyls, int heads, int sectors, 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 @@ -122,9 +134,9 @@ sfdisk_flag (const char *device, const char *flag) char *out, *err; int r; - r = command (&out, &err, "/sbin/sfdisk", flag, device, NULL); + r = command (&out, &err, "sfdisk", flag, device, NULL); if (r == -1) { - reply_with_error ("sfdisk: %s: %s", device, err); + reply_with_error ("%s: %s", device, err); free (out); free (err); return NULL;