Browse code

devmapper: add and use removeDeviceAndWait helper

This adds a function that calls the lowlevel removeDevice
and then waits for it to finish.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)

Alexander Larsson authored on 2014/02/05 00:06:54
Showing 1 changed files
... ...
@@ -632,28 +632,33 @@ func (devices *DeviceSet) deactivateDevice(hash string) error {
632 632
 		return err
633 633
 	}
634 634
 	if devinfo.Exists != 0 {
635
-		if err := removeDevice(devname); err != nil {
635
+		if err := devices.removeDeviceAndWait(devname); err != nil {
636 636
 			utils.Debugf("\n--->Err: %s\n", err)
637 637
 			return err
638 638
 		}
639
-		if err := devices.waitRemove(hash); err != nil {
640
-			return err
641
-		}
642 639
 	}
643 640
 
644 641
 	return nil
645 642
 }
646 643
 
644
+// Issues the underlying dm remove operation and then waits
645
+// for it to finish.
646
+func (devices *DeviceSet) removeDeviceAndWait(devname string) error {
647
+	if err := removeDevice(devname); err != nil {
648
+		return err
649
+	}
650
+	if err := devices.waitRemove(devname); err != nil {
651
+		return err
652
+	}
653
+	return nil
654
+}
655
+
647 656
 // waitRemove blocks until either:
648 657
 // a) the device registered at <device_set_prefix>-<hash> is removed,
649 658
 // or b) the 1 second timeout expires.
650
-func (devices *DeviceSet) waitRemove(hash string) error {
651
-	utils.Debugf("[deviceset %s] waitRemove(%s)", devices.devicePrefix, hash)
652
-	defer utils.Debugf("[deviceset %s] waitRemove(%) END", devices.devicePrefix, hash)
653
-	devname, err := devices.byHash(hash)
654
-	if err != nil {
655
-		return err
656
-	}
659
+func (devices *DeviceSet) waitRemove(devname string) error {
660
+	utils.Debugf("[deviceset %s] waitRemove(%s)", devices.devicePrefix, devname)
661
+	defer utils.Debugf("[deviceset %s] waitRemove(%s) END", devices.devicePrefix, devname)
657 662
 	i := 0
658 663
 	for ; i < 1000; i += 1 {
659 664
 		devinfo, err := getInfo(devname)