github.com/mforkel/docker-ce-i386@v17.12.1-ce-rc2+incompatible/components/engine/daemon/getsize_unix.go (about) 1 // +build linux freebsd 2 3 package daemon 4 5 import ( 6 "runtime" 7 8 "github.com/sirupsen/logrus" 9 ) 10 11 // getSize returns the real size & virtual size of the container. 12 func (daemon *Daemon) getSize(containerID string) (int64, int64) { 13 var ( 14 sizeRw, sizeRootfs int64 15 err error 16 ) 17 18 rwlayer, err := daemon.stores[runtime.GOOS].layerStore.GetRWLayer(containerID) 19 if err != nil { 20 logrus.Errorf("Failed to compute size of container rootfs %v: %v", containerID, err) 21 return sizeRw, sizeRootfs 22 } 23 defer daemon.stores[runtime.GOOS].layerStore.ReleaseRWLayer(rwlayer) 24 25 sizeRw, err = rwlayer.Size() 26 if err != nil { 27 logrus.Errorf("Driver %s couldn't return diff size of container %s: %s", 28 daemon.GraphDriverName(runtime.GOOS), containerID, err) 29 // FIXME: GetSize should return an error. Not changing it now in case 30 // there is a side-effect. 31 sizeRw = -1 32 } 33 34 if parent := rwlayer.Parent(); parent != nil { 35 sizeRootfs, err = parent.Size() 36 if err != nil { 37 sizeRootfs = -1 38 } else if sizeRw != -1 { 39 sizeRootfs += sizeRw 40 } 41 } 42 return sizeRw, sizeRootfs 43 }