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. diff --git a/fdisk/fdisk.c b/fdisk/fdisk.c index dac14c2..2db6d27 100644 --- a/fdisk/fdisk.c +++ b/fdisk/fdisk.c @@ -2250,30 +2250,35 @@ 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; - } + fstat(fd, &statbuf); - if (i) { - printf(_("\nWARNING: Re-reading the partition table " - "failed with error %d: %s.\n" - "The kernel still uses the old table.\n" - "The new table will be used " - "at the next reboot.\n"), - error, strerror(error)); - } + if(S_ISBLK(statbuf.st_mode)) { /* block device */ + 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; + } + + if (i) { + printf(_("\nWARNING: Re-reading the partition table " + "failed with error %d: %s.\n" + "The kernel still uses the old table.\n" + "The new table will be used " + "at the next reboot.\n"), + error, strerror(error)); + } + } /* block device */ if (dos_changed) printf( - 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