fdisk reinstate sleep
Bob Dunlop
bob.dunlop at xyzzy.org.uk
Tue Jul 12 09:47:16 UTC 2011
Hi,
On Mon, Jul 11 at 05:16, Rich Felker wrote:
> In my opinion the patch is unacceptable as-is. Any sleeps need to be
> optional and off-by-default, and at least someone should investigate
> the time actually needed. Or it could just loop retrying until it's no
> longer busy. This would be much more robust.
Here's an alternate along your lines but it's a lot of code for very
little gain. I think a static delay is acceptable in a program that
is going to be run once in a blue moon.
There's still a fixed (is smaller) delay in there, I don't like CPU bound
busy loops.
With some debug annotation my test rig goes around the loop a maximum of
3 times. So approx 150ms, but I'm guessing this will be very hardware
dependent.
--- busybox-1.18.3/util-linux/fdisk.c-orig 2011-07-12 10:21:47.000000000 +0100
+++ busybox-1.18.3/util-linux/fdisk.c 2011-07-12 10:26:34.000000000 +0100
@@ -2564,10 +2564,18 @@
printf("Calling ioctl() to re-read partition table\n");
sync();
- /* sleep(2); Huh? */
- i = ioctl_or_perror(dev_fd, BLKRRPART, NULL,
- "WARNING: rereading partition table "
- "failed, kernel still uses old table");
+ for (;;) {
+ i = ioctl(dev_fd, BLKRRPART, NULL);
+ if(i == 0)
+ break;
+ if(errno != EBUSY) {
+ bb_perror_msg(
+ "WARNING: rereading partition table "
+ "failed, kernel still uses old table");
+ break;
+ }
+ usleep(50000);
+ }
#if 0
if (dos_changed)
printf(
--
Bob Dunlop
More information about the busybox
mailing list