Image: Deactivate image device when unmounting container
There is no need to keep all the device-mapper devices active, we can just activate them on demand if needed. Upstream-commit: a89a51128ecdf2db02a333a406752416de8a1db6 Component: engine
This commit is contained in:
committed by
Victor Vieux
parent
f67c857087
commit
3fad97e978
@ -1180,7 +1180,12 @@ func (container *Container) Mounted() (bool, error) {
|
||||
}
|
||||
|
||||
func (container *Container) Unmount() error {
|
||||
return Unmount(container.RootfsPath())
|
||||
image, err := container.GetImage()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = image.Unmount(container.runtime, container.RootfsPath(), container.ID)
|
||||
return err
|
||||
}
|
||||
|
||||
// ShortID returns a shorthand version of the container's id for convenience.
|
||||
|
||||
@ -444,6 +444,30 @@ func (image *Image) Mount(runtime *Runtime, root, rw string, id string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (image *Image) Unmount(runtime *Runtime, root string, id string) error {
|
||||
switch runtime.GetMountMethod() {
|
||||
case MountMethodNone:
|
||||
return fmt.Errorf("No supported Unmount implementation")
|
||||
|
||||
case MountMethodAUFS:
|
||||
return Unmount(root)
|
||||
|
||||
case MountMethodDeviceMapper:
|
||||
err := syscall.Unmount(root, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Try to deactivate the device as generally there is no use for it anymore
|
||||
devices, err := runtime.GetDeviceSet()
|
||||
if err != nil {
|
||||
return err;
|
||||
}
|
||||
return devices.DeactivateDevice(id)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (image *Image) Changes(rw string) ([]Change, error) {
|
||||
layers, err := image.layers()
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user