improved loop creation
authorjobol <jobol@nonadev.net>
Mon, 19 Nov 2012 07:49:59 +0000 (08:49 +0100)
committerGui Chen <gui.chen@intel.com>
Wed, 12 Dec 2012 11:33:44 +0000 (19:33 +0800)
Signed-off-by: Gui Chen <gui.chen@intel.com>
mic/utils/fs_related.py

index 4b84928..2447b30 100644 (file)
@@ -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