]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-disk: fix verify_no_in_use check
authorSage Weil <sage@redhat.com>
Mon, 11 Aug 2014 22:57:52 +0000 (15:57 -0700)
committerSage Weil <sage@redhat.com>
Sat, 16 Aug 2014 00:15:36 +0000 (17:15 -0700)
We only need to verify that partitions aren't in use when we want to
consume the whole device (osd data), not when we want to create an
additional partition for ourselves (osd journal).

Backport: firefly
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit d6e6ba198efc4b3afff0c70af53497a70c6b3f19)

src/ceph-disk

index 8ca5f3b17c859f43a5bfefa67f183efc7021a7d0..219f37b26e7c79e54d0003d90635ae364e5243b6 100755 (executable)
@@ -500,7 +500,7 @@ def is_held(dev):
     return []
 
 
-def verify_not_in_use(dev):
+def verify_not_in_use(dev, check_partitions=False):
     """
     Verify if a given device (path) is in use (e.g. mounted or
     in use by device-mapper).
@@ -508,13 +508,13 @@ def verify_not_in_use(dev):
     :raises: Error if device is in use.
     """
     assert os.path.exists(dev)
-    if is_partition(dev):
-        if is_mounted(dev):
-            raise Error('Device is mounted', dev)
-        holders = is_held(dev)
-        if holders:
-            raise Error('Device is in use by a device-mapper mapping (dm-crypt?)' % dev, ','.join(holders))
-    else:
+    if is_mounted(dev):
+        raise Error('Device is mounted', dev)
+    holders = is_held(dev)
+    if holders:
+        raise Error('Device is in use by a device-mapper mapping (dm-crypt?)' % dev, ','.join(holders))
+
+    if check_partitions and not is_partition(dev):
         basename = get_dev_name(os.path.realpath(dev))
         for partname in list_partitions(basename):
             partition = get_dev_path(partname)
@@ -1340,12 +1340,12 @@ def main_prepare(args):
         # in use?
         dmode = os.stat(args.data).st_mode
         if stat.S_ISBLK(dmode):
-            verify_not_in_use(args.data)
+            verify_not_in_use(args.data, True)
 
         if args.journal and os.path.exists(args.journal):
             jmode = os.stat(args.journal).st_mode
             if stat.S_ISBLK(jmode):
-                verify_not_in_use(args.journal)
+                verify_not_in_use(args.journal, False)
 
         if args.zap_disk is not None:
             if stat.S_ISBLK(dmode) and not is_partition(args.data):