When editing a disk image, fdisk wants to ask the kernel to reread the partition table which is useless and provokes an error, a wrong exit code and some waiting. This annoys me as I can't check the return code in my script and because I have to wait a few seconds each time. This trivial patch makes it only do the ioctl on block devices. It also simplifies code by dropping some workaround for kernel 1.2.x Signed-off-by: Pascal Terjan <pterjan@xxxxxxxxxxx> diff --git a/fdisk/fdisk.c b/fdisk/fdisk.c index dac14c2..89a4925 100644 --- a/fdisk/fdisk.c +++ b/fdisk/fdisk.c @@ -2248,22 +2248,15 @@ write_table(void) { void reread_partition_table(int leave) { - int error = 0; int i; + struct stat statbuf; - printf(_("Calling ioctl() to re-read partition table.\n")); - sync(); - sleep(2); - if ((i = ioctl(fd, BLKRRPART)) != 0) { - error = errno; - } else { - /* some kernel versions (1.2.x) seem to have trouble - rereading the partition table, but if asked to do it - twice, the second time works. - biro@xxxxxxxxxxxxx */ - sync(); - sleep(2); - if ((i = ioctl(fd, BLKRRPART)) != 0) - error = errno; + i = fstat(fd, &statbuf); + if (i == 0 && S_ISBLK(statbuf.st_mode)) { + printf(_("Calling ioctl() to re-read partition table.\n")); + sync(); + sleep(2); + i = ioctl(fd, BLKRRPART); } if (i) { @@ -2272,7 +2265,7 @@ reread_partition_table(int leave) { "The kernel still uses the old table.\n" "The new table will be used " "at the next reboot.\n"), - error, strerror(error)); + errno, strerror(errno)); } if (dos_changed) -- 1.5.2.5 - To unsubscribe from this list: send the line "unsubscribe util-linux-ng" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html