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 {
|