Просмотр исходного кода

pkg/devicemapper: cleanup removeDevice differences

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>
Vincent Batts 10 лет назад
Родитель
Сommit
c9a7662208
1 измененных файлов с 18 добавлено и 26 удалено
  1. 18 26
      pkg/devicemapper/devmapper.go

+ 18 - 26
pkg/devicemapper/devmapper.go

@@ -62,7 +62,7 @@ var (
 	ErrSetDevDir              = errors.New("dm_set_dev_dir failed")
 	ErrGetLibraryVersion      = errors.New("dm_get_library_version failed")
 	ErrCreateRemoveTask       = errors.New("Can't create task of type DeviceRemove")
-	ErrRunRemoveDevice        = errors.New("running removeDevice failed")
+	ErrRunRemoveDevice        = errors.New("running RemoveDevice failed")
 	ErrInvalidAddNode         = errors.New("Invalide AddNoce type")
 	ErrGetLoopbackBackingFile = errors.New("Unable to get loopback backing file")
 	ErrLoopbackSetCapacity    = errors.New("Unable set loopback capacity")
@@ -296,18 +296,27 @@ func GetLibraryVersion() (string, error) {
 
 // Useful helper for cleanup
 func RemoveDevice(name string) error {
-	// TODO(vbatts) just use the other removeDevice()
-	task := TaskCreate(DeviceRemove)
+	log.Debugf("[devmapper] RemoveDevice START")
+	defer log.Debugf("[devmapper] RemoveDevice END")
+	task, err := createTask(DeviceRemove, name)
 	if task == nil {
-		return ErrCreateRemoveTask
-	}
-	if err := task.SetName(name); err != nil {
-		log.Debugf("Can't set task name %s", name)
 		return err
 	}
-	if err := task.Run(); err != nil {
-		return ErrRunRemoveDevice
+
+	var cookie uint = 0
+	if err := task.SetCookie(&cookie, 0); err != nil {
+		return fmt.Errorf("Can not set cookie: %s", err)
 	}
+
+	if err = task.Run(); err != nil {
+		if dmSawBusy {
+			return ErrBusy
+		}
+		return fmt.Errorf("Error running RemoveDevice %s", err)
+	}
+
+	UdevWait(cookie)
+
 	return nil
 }
 
@@ -568,23 +577,6 @@ func DeleteDevice(poolName string, deviceId int) error {
 	return nil
 }
 
-func removeDevice(name string) error {
-	log.Debugf("[devmapper] RemoveDevice START")
-	defer log.Debugf("[devmapper] RemoveDevice END")
-	task, err := createTask(DeviceRemove, name)
-	if task == nil {
-		return err
-	}
-	dmSawBusy = false
-	if err = task.Run(); err != nil {
-		if dmSawBusy {
-			return ErrBusy
-		}
-		return fmt.Errorf("Error running RemoveDevice %s", err)
-	}
-	return nil
-}
-
 func ActivateDevice(poolName string, name string, deviceId int, size uint64) error {
 	task, err := createTask(DeviceCreate, name)
 	if task == nil {