diff -up udisks-2.9.4/src/udiskslinuxblockobject.c.bak udisks-2.9.4/src/udiskslinuxblockobject.c --- udisks-2.9.4/src/udiskslinuxblockobject.c.bak 2021-09-29 18:00:31.000000000 +0200 +++ udisks-2.9.4/src/udiskslinuxblockobject.c 2024-05-15 14:29:38.637194092 +0200 @@ -1059,16 +1059,24 @@ udisks_linux_block_object_reread_partiti /* acquire an exclusive BSD lock to prevent udev probes. * See also https://systemd.io/BLOCK_DEVICE_LOCKING */ + num_tries = 10; while (flock (fd, LOCK_EX | LOCK_NB) != 0) { g_usleep (100 * 1000); /* microseconds */ - if (num_tries++ > 5) + if (num_tries-- < 0) break; } - if (ioctl (fd, BLKRRPART) != 0) + num_tries = 5; + while (ioctl (fd, BLKRRPART) != 0) { + if (errno == EBUSY && num_tries-- >= 0) + { + g_usleep (200 * 1000); /* microseconds */ + continue; + } udisks_warning ("Error issuing BLKRRPART to %s: %m", device_file); + break; } close (fd); }