Browse Source

Image: unmount device before removing it on failures

If we don't do this the remove will fail due to EBUSY
Alexander Larsson 11 years ago
parent
commit
009d0f9d81
1 changed files with 3 additions and 0 deletions
  1. 3 0
      image.go

+ 3 - 0
image.go

@@ -414,6 +414,7 @@ func (image *Image) ensureImageDevice(devices DeviceSet) error {
 
 
 	err = ioutil.WriteFile(path.Join(mountDir, ".docker-id"), []byte(image.ID), 0600)
 	err = ioutil.WriteFile(path.Join(mountDir, ".docker-id"), []byte(image.ID), 0600)
 	if err != nil {
 	if err != nil {
+		_ = devices.UnmountDevice(image.ID, mountDir)
 		_ = devices.RemoveDevice(image.ID)
 		_ = devices.RemoveDevice(image.ID)
 		return err
 		return err
 	}
 	}
@@ -432,11 +433,13 @@ func (image *Image) ensureImageDevice(devices DeviceSet) error {
 	// part of the container changes
 	// part of the container changes
 	dockerinitLayer, err := image.getDockerInitLayer()
 	dockerinitLayer, err := image.getDockerInitLayer()
 	if err != nil {
 	if err != nil {
+		_ = devices.UnmountDevice(image.ID, mountDir)
 		_ = devices.RemoveDevice(image.ID)
 		_ = devices.RemoveDevice(image.ID)
 		return err
 		return err
 	}
 	}
 	err = image.applyLayer(dockerinitLayer, mountDir)
 	err = image.applyLayer(dockerinitLayer, mountDir)
 	if err != nil {
 	if err != nil {
+		_ = devices.UnmountDevice(image.ID, mountDir)
 		_ = devices.RemoveDevice(image.ID)
 		_ = devices.RemoveDevice(image.ID)
 		return err
 		return err
 	}
 	}