--- libparted/arch/linux.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) Index: parted-3.1/libparted/arch/linux.c =================================================================== --- parted-3.1.orig/libparted/arch/linux.c +++ parted-3.1/libparted/arch/linux.c @@ -40,6 +40,7 @@ #include #include #include /* for uname() */ +#include #include #include #ifdef ENABLE_DEVICE_MAPPER @@ -2901,14 +2902,15 @@ static int _kernel_reread_part_table (PedDevice* dev) { LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev); - int retry_count = 9; + int retry_count = 5; sync(); + flock(arch_specific->fd, LOCK_EX); while (ioctl (arch_specific->fd, BLKRRPART)) { retry_count--; sync(); - if (retry_count == 3) - sleep(1); /* Pause to allow system to settle */ + + sleep(1); /* Pause to allow system to settle */ if (!retry_count) { ped_exception_throw ( @@ -2918,10 +2920,12 @@ _kernel_reread_part_table (PedDevice* de "table on %s (%s). As a result, it may not " "reflect all of your changes until after reboot."), dev->path, strerror (errno)); + flock(arch_specific->fd, LOCK_UN); return 0; } } + flock(arch_specific->fd, LOCK_UN); return 1; }