Fixes failure on RemoveDevice when host is AUFS, and running
devicemapper test docker-in-docker
https://gist.github.com/tonistiigi/59559cbfb3f2df26b29c
Signed-off-by: Vincent Batts <vbatts@redhat.com>
... | ... |
@@ -62,7 +62,7 @@ var ( |
62 | 62 |
ErrSetDevDir = errors.New("dm_set_dev_dir failed") |
63 | 63 |
ErrGetLibraryVersion = errors.New("dm_get_library_version failed") |
64 | 64 |
ErrCreateRemoveTask = errors.New("Can't create task of type DeviceRemove") |
65 |
- ErrRunRemoveDevice = errors.New("running removeDevice failed") |
|
65 |
+ ErrRunRemoveDevice = errors.New("running RemoveDevice failed") |
|
66 | 66 |
ErrInvalidAddNode = errors.New("Invalide AddNoce type") |
67 | 67 |
ErrGetLoopbackBackingFile = errors.New("Unable to get loopback backing file") |
68 | 68 |
ErrLoopbackSetCapacity = errors.New("Unable set loopback capacity") |
... | ... |
@@ -296,18 +296,27 @@ func GetLibraryVersion() (string, error) { |
296 | 296 |
|
297 | 297 |
// Useful helper for cleanup |
298 | 298 |
func RemoveDevice(name string) error { |
299 |
- // TODO(vbatts) just use the other removeDevice() |
|
300 |
- task := TaskCreate(DeviceRemove) |
|
299 |
+ log.Debugf("[devmapper] RemoveDevice START") |
|
300 |
+ defer log.Debugf("[devmapper] RemoveDevice END") |
|
301 |
+ task, err := createTask(DeviceRemove, name) |
|
301 | 302 |
if task == nil { |
302 |
- return ErrCreateRemoveTask |
|
303 |
- } |
|
304 |
- if err := task.SetName(name); err != nil { |
|
305 |
- log.Debugf("Can't set task name %s", name) |
|
306 | 303 |
return err |
307 | 304 |
} |
308 |
- if err := task.Run(); err != nil { |
|
309 |
- return ErrRunRemoveDevice |
|
305 |
+ |
|
306 |
+ var cookie uint = 0 |
|
307 |
+ if err := task.SetCookie(&cookie, 0); err != nil { |
|
308 |
+ return fmt.Errorf("Can not set cookie: %s", err) |
|
310 | 309 |
} |
310 |
+ |
|
311 |
+ if err = task.Run(); err != nil { |
|
312 |
+ if dmSawBusy { |
|
313 |
+ return ErrBusy |
|
314 |
+ } |
|
315 |
+ return fmt.Errorf("Error running RemoveDevice %s", err) |
|
316 |
+ } |
|
317 |
+ |
|
318 |
+ UdevWait(cookie) |
|
319 |
+ |
|
311 | 320 |
return nil |
312 | 321 |
} |
313 | 322 |
|
... | ... |
@@ -568,23 +577,6 @@ func DeleteDevice(poolName string, deviceId int) error { |
568 | 568 |
return nil |
569 | 569 |
} |
570 | 570 |
|
571 |
-func removeDevice(name string) error { |
|
572 |
- log.Debugf("[devmapper] RemoveDevice START") |
|
573 |
- defer log.Debugf("[devmapper] RemoveDevice END") |
|
574 |
- task, err := createTask(DeviceRemove, name) |
|
575 |
- if task == nil { |
|
576 |
- return err |
|
577 |
- } |
|
578 |
- dmSawBusy = false |
|
579 |
- if err = task.Run(); err != nil { |
|
580 |
- if dmSawBusy { |
|
581 |
- return ErrBusy |
|
582 |
- } |
|
583 |
- return fmt.Errorf("Error running RemoveDevice %s", err) |
|
584 |
- } |
|
585 |
- return nil |
|
586 |
-} |
|
587 |
- |
|
588 | 571 |
func ActivateDevice(poolName string, name string, deviceId int, size uint64) error { |
589 | 572 |
task, err := createTask(DeviceCreate, name) |
590 | 573 |
if task == nil { |