From 6293da58748ab3197234a6e6fd3f87cee2bc469c Mon Sep 17 00:00:00 2001 From: Christian Kellner Date: Tue, 3 Aug 2021 12:20:02 +0000 Subject: [PATCH] devices/loopback: use new loop_for_fd helper Use the new `LoopControl.loop_for_fd` helper, which is basically a modified version of the existing code in `make_loop`. --- devices/org.osbuild.loopback | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/devices/org.osbuild.loopback b/devices/org.osbuild.loopback index afe3b1e1..a8e598a9 100755 --- a/devices/org.osbuild.loopback +++ b/devices/org.osbuild.loopback @@ -66,29 +66,10 @@ class LoopbackService(devices.DeviceService): else: sizelimit *= self.sector_size - while True: - # Getting an unbound loopback device and attaching a backing - # file descriptor to it is racy, so we must use a retry loop - lo = loop.Loop(self.ctl.get_unbound()) - - try: - lo.set_fd(fd) - except OSError as e: - lo.close() - if e.errno == errno.EBUSY: - continue - raise e - # `set_status` returns EBUSY when the pages from the previously - # bound file have not been fully cleared yet. - try: - lo.set_status(offset=offset, - sizelimit=sizelimit, - autoclear=True) - except BlockingIOError: - lo.clear_fd() - lo.close() - continue - break + lo = self.ctl.loop_for_fd(fd, + offset=offset, + sizelimit=sizelimit, + autoclear=True) return lo