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: a9ec1dbc9bec91e1c0f1b751a06680570a04e915 Component: engine
This commit is contained in:
committed by
Tianon Gravi
parent
f4fd5894a2
commit
0134fab2c6
@ -1181,7 +1181,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