From 2508ca000e79dfe1a956b0078a0d196dd6b66dab Mon Sep 17 00:00:00 2001 From: Vivek Goyal Date: Wed, 21 Sep 2016 14:45:25 -0400 Subject: [PATCH] layer_store: Use CreateReadWrite() for -init layer instead of Create() init layer is read/write layer and not read only layer. Following commit introduced new graph driver method CreateReadWrite. ef5bfad Adding readOnly parameter to graphdriver Create method So far only windows seem to be differentiating between above two methods. Making this change to make sure -init layer calls right method so that we don't have surprises in future. Windows does not need init layer. This patch also gets rid of creation of init layer on windows. Signed-off-by: Vivek Goyal --- daemon/create.go | 4 +++- daemon/daemon_unix.go | 4 ++++ daemon/daemon_windows.go | 4 ++++ layer/layer_store.go | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/daemon/create.go b/daemon/create.go index bf8c90e3efbd0ae9a9d9bfbb5350aca9ddc77be2..bf8f59c416ce5fe8c67c522c805c8395e0002576 100644 --- a/daemon/create.go +++ b/daemon/create.go @@ -201,7 +201,9 @@ func (daemon *Daemon) setRWLayer(container *container.Container) error { } layerID = img.RootFS.ChainID() } - rwLayer, err := daemon.layerStore.CreateRWLayer(container.ID, layerID, container.MountLabel, daemon.setupInitLayer, container.HostConfig.StorageOpt) + + rwLayer, err := daemon.layerStore.CreateRWLayer(container.ID, layerID, container.MountLabel, daemon.getLayerInit(), container.HostConfig.StorageOpt) + if err != nil { return err } diff --git a/daemon/daemon_unix.go b/daemon/daemon_unix.go index 4ed0594c6a312c7371b46c3edecb305b254a4570..ba0c423aafde985158e0e37a199bfaf8e923a7d9 100644 --- a/daemon/daemon_unix.go +++ b/daemon/daemon_unix.go @@ -779,6 +779,10 @@ func initBridgeDriver(controller libnetwork.NetworkController, config *Config) e return nil } +func (daemon *Daemon) getLayerInit() func(string) error { + return daemon.setupInitLayer +} + // setupInitLayer populates a directory with mountpoints suitable // for bind-mounting things into the container. // diff --git a/daemon/daemon_windows.go b/daemon/daemon_windows.go index f75006441a3bb85b8384d61c4f3f47afbeacd59a..c65c597ac1e3d62d9757b1e2e8994b4f20f19877 100644 --- a/daemon/daemon_windows.go +++ b/daemon/daemon_windows.go @@ -61,6 +61,10 @@ func setupInitLayer(initLayer string, rootUID, rootGID int) error { return nil } +func (daemon *Daemon) getLayerInit() func(string) error { + return nil +} + func checkKernel() error { return nil } diff --git a/layer/layer_store.go b/layer/layer_store.go index a587b01abffc7a7a9c60f867546b38f00b356252..f6e8db4d97b2409ff390b2a62328a4f7e033010c 100644 --- a/layer/layer_store.go +++ b/layer/layer_store.go @@ -586,7 +586,7 @@ func (ls *layerStore) initMount(graphID, parent, mountLabel string, initFunc Mou // then the initID should be randomly generated. initID := fmt.Sprintf("%s-init", graphID) - if err := ls.driver.Create(initID, parent, mountLabel, storageOpt); err != nil { + if err := ls.driver.CreateReadWrite(initID, parent, mountLabel, storageOpt); err != nil { return "", err } p, err := ls.driver.Get(initID, "")