From 648a8db5a0d9de4e849c483f5a2ce72a39e8317a Mon Sep 17 00:00:00 2001 From: jobol Date: Mon, 19 Nov 2012 08:49:59 +0100 Subject: [PATCH] improved loop creation Signed-off-by: Gui Chen --- mic/utils/fs_related.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/mic/utils/fs_related.py b/mic/utils/fs_related.py index 4b84928..2447b30 100644 --- a/mic/utils/fs_related.py +++ b/mic/utils/fs_related.py @@ -926,15 +926,20 @@ def get_loop_device(losetupcmd, lofile): fp = open("/var/lock/__mic_loopdev.lock", 'w') fcntl.flock(fp, fcntl.LOCK_EX) try: - devinst = LoopDevice() - devinst.create() + rc, out = runner.runtool([losetupcmd, "--find"]) + if rc == 0: + loopdev = out.split()[0] + else: + devinst = LoopDevice() + devinst.create() + loopdev = devinst.device + rc = runner.show([losetupcmd, loopdev, lofile]) + if rc != 0: + raise MountError("Failed to setup loop device for '%s'" % lofile) + except MountError, err: + raise CreatorError("%s" % str(err)) except: - rc, out = runner.runtool([losetupcmd, "-f"]) - if rc != 0: - raise MountError("1-Failed to allocate loop device for '%s'" % lofile) - loopdev = out.split()[0] - else: - loopdev = devinst.device + raise finally: try: fcntl.flock(fp, fcntl.LOCK_UN) @@ -943,10 +948,6 @@ def get_loop_device(losetupcmd, lofile): except: pass - rc = runner.show([losetupcmd, loopdev, lofile]) - if rc != 0: - raise MountError("2-Failed to allocate loop device for '%s'" % lofile) - return loopdev -- 2.7.4