From f27d989c67eb0d85b3bfc54807e626ff16e71f56 Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Wed, 17 Aug 2016 12:54:40 +0200 Subject: [PATCH] losetup: Prevent AUTOCLEAR detach race Kernel needs some time to delete a device after losetup --detach. If the losetup --find --nooverlay is called just after losetup --delete, it can sometimes attempt to recycle the device that is just being released. To prevent this race, clear the AUTOCLEAR flag of the device. [kzak@redhat.com: - rebase to the new version of the code] Signed-off-by: Stanislav Brabec Signed-off-by: Karel Zak --- sys-utils/losetup.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sys-utils/losetup.c b/sys-utils/losetup.c index ba1363de3b..606789c427 100644 --- a/sys-utils/losetup.c +++ b/sys-utils/losetup.c @@ -481,6 +481,12 @@ static int create_loop(struct loopdev_cxt *lc, loopcxt_deinit(lc); errx(EXIT_FAILURE, _("%s: overlapping encrypted loop device exists"), file); } + + lc->info.lo_flags &= !LO_FLAGS_AUTOCLEAR; + if (loopcxt_set_status(lc)) { + loopcxt_deinit(lc); + errx(EXIT_FAILURE, _("%s: failed to re-use loop device"), file); + } return 0; /* success, re-use */ } default: /* error */ -- 2.47.3