fdisk: reinstate a short sleep between sync() and ioctl(BLKRRPART)

While at it, simplify code a bit.

function                                             old     new   delta
write_table                                          201     198      -3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/util-linux/fdisk.c b/util-linux/fdisk.c
index b86b13b..9765586 100644
--- a/util-linux/fdisk.c
+++ b/util-linux/fdisk.c
@@ -201,7 +201,6 @@
 static void update_units(void);
 #if ENABLE_FEATURE_FDISK_WRITABLE
 static void change_units(void);
-static void reread_partition_table(int leave);
 static void delete_partition(int i);
 static unsigned get_partition(int warn, unsigned max);
 static void list_types(const char *const *sys);
@@ -2553,7 +2552,6 @@
 				ptes[3].changed = 1;
 		for (i = 3; i < g_partitions; i++) {
 			struct pte *pe = &ptes[i];
-
 			if (pe->changed) {
 				write_part_table_flag(pe->sectorbuffer);
 				write_sector(pe->offset_from_dev_start, pe->sectorbuffer);
@@ -2565,27 +2563,24 @@
 		sgi_write_table();
 	}
 	else if (LABEL_IS_SUN) {
-		int needw = 0;
-
-		for (i = 0; i < 8; i++)
-			if (ptes[i].changed)
-				needw = 1;
-		if (needw)
-			sun_write_table();
+		for (i = 0; i < 8; i++) {
+			if (ptes[i].changed) {
+				sun_write_table();
+				break;
+			}
+		}
 	}
 
-	printf("The partition table has been altered!\n\n");
-	reread_partition_table(1);
-}
+	printf(
+		"The partition table has been altered.\n"
+		"Calling ioctl(BLKRRPART) to re-read partition table.\n"
+	);
 
-static void
-reread_partition_table(int leave)
-{
-	int i;
-
-	printf("Calling ioctl() to re-read partition table\n");
 	sync();
-	/* sleep(2); Huh? */
+	/* Users with slow external USB disks on a 320MHz ARM system (year 2011)
+	 * report that sleep is needed, otherwise BLKRRPART may fail with -EIO:
+	 */
+	sleep(1);
 	i = ioctl_or_perror(dev_fd, BLKRRPART, NULL,
 			"WARNING: rereading partition table "
 			"failed, kernel still uses old table");
@@ -2597,11 +2592,9 @@
 		"information\n");
 #endif
 
-	if (leave) {
-		if (ENABLE_FEATURE_CLEAN_UP)
-			close_dev_fd();
-		exit(i != 0);
-	}
+	if (ENABLE_FEATURE_CLEAN_UP)
+		close_dev_fd();
+	exit(i != 0);
 }
 #endif /* FEATURE_FDISK_WRITABLE */
 
@@ -3100,7 +3093,7 @@
 			verify();
 			break;
 		case 'w':
-			write_table();          /* does not return */
+			write_table();  /* does not return */
 			break;
 #if ENABLE_FEATURE_FDISK_ADVANCED
 		case 'x':