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