Index: multipath-tools-120821/kpartx/lopart.c =================================================================== --- multipath-tools-120821.orig/kpartx/lopart.c +++ multipath-tools-120821/kpartx/lopart.c @@ -286,6 +286,7 @@ set_loop (const char *device, const char extern int del_loop (const char *device) { + int retries = 3; int fd; if ((fd = open (device, O_RDONLY)) < 0) { @@ -295,10 +296,17 @@ del_loop (const char *device) return 1; } - if (ioctl (fd, LOOP_CLR_FD, 0) < 0) { - perror ("ioctl: LOOP_CLR_FD"); - close (fd); - return 1; + while (ioctl (fd, LOOP_CLR_FD, 0) < 0) { + if (errno != EBUSY || retries-- <= 0) { + perror ("ioctl: LOOP_CLR_FD"); + close (fd); + return 1; + } + fprintf(stderr, + "loop: device %s still in use, retrying delete\n", + device); + sleep(1); + continue; } close (fd);