From 9bbed5ab4ceaff5e78c21f0fa2d84de5ffd41f94 Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 3 Jan 2015 14:07:24 -0800 Subject: [PATCH] change to lazy Unmount syscall.Unmount failed sometimes when user interrupted exporting, for example a Ctrl-C, or pipe to commands which closed the pipe early, like "docker export | file -"; this syscall.Unmount could sometimes return EBUSY and didn't actually umount the filesystem; which would cause a following export command fail to mount; change to lazy Unmount with MNT_DETACH can fix the problem, this is the same behavior as in Shutdown; ```text time="2015-01-03T21:27:26Z" level=error msg="Warning: error unmounting device 34a3e77cdbca17ceffd0636aee0415bb412996adb12360bfe2585ce30467fa8e: device or resource busy" ``` ``` $ docker export thirsty_ardinghelli | file - /dev/stdin: POSIX tar archive time="2015-01-03T21:58:17Z" level=fatal msg="write /dev/stdout: broken pipe" $ docker export thirsty_ardinghelli time="2015-01-03T21:54:33Z" level=fatal msg="Error: thirsty_ardinghelli: Error getting container 34a3e77cdbca17ceffd0636aee0415bb412996adb12360bfe2585ce30467fa8e from driver devicemapper: Error mounting '/dev/mapper/docker-253:0-3148372-34a3e77cdbca17ceffd0636aee0415bb412996adb12360bfe2585ce30467fa8e' on '/var/lib/docker/devicemapper/mnt/34a3e77cdbca17ceffd0636aee0415bb412996adb12360bfe2585ce30467fa8e': device or resource busy" ``` Signed-off-by: Derek Che --- daemon/graphdriver/devmapper/deviceset.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/graphdriver/devmapper/deviceset.go b/daemon/graphdriver/devmapper/deviceset.go index 658000d753..078e31a1ec 100644 --- a/daemon/graphdriver/devmapper/deviceset.go +++ b/daemon/graphdriver/devmapper/deviceset.go @@ -1433,7 +1433,7 @@ func (devices *DeviceSet) UnmountDevice(hash string) error { } log.Debugf("[devmapper] Unmount(%s)", info.mountPath) - if err := syscall.Unmount(info.mountPath, 0); err != nil { + if err := syscall.Unmount(info.mountPath, syscall.MNT_DETACH); err != nil { return err } log.Debugf("[devmapper] Unmount done")