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)
| ... | ... |
@@ -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) |