f1cfd038e27136b451e94893df5c56eca9abb672
This commit is a set of fixes and improvement for zfs graph driver, in particular: 1. Remove mount point after umount in `Get()` error path, as well as in `Put()` (with `MNT_DETACH` flag). This should solve "failed to remove root filesystem for <ID> .... dataset is busy" error reported in Moby issue 35642. To reproduce the issue: - start dockerd with zfs - docker run -d --name c1 --rm busybox top - docker run -d --name c2 --rm busybox top - docker stop c1 - docker rm c1 Output when the bug is present: ``` Error response from daemon: driver "zfs" failed to remove root filesystem for XXX : exit status 1: "/sbin/zfs zfs destroy -r scratch/docker/YYY" => cannot destroy 'scratch/docker/YYY': dataset is busy ``` Output when the bug is fixed: ``` Error: No such container: c1 ``` (as the container has been successfully autoremoved on stop) 2. Fix/improve error handling in `Get()` -- do not try to umount if `refcount` > 0 3. Simplifies unmount in `Get()`. Specifically, remove call to `graphdriver.Mounted()` (which checks if fs is mounted using `statfs()` and check for fs type) and `mount.Unmount()` (which parses `/proc/self/mountinfo`). Calling `unix.Unmount()` is simple and sufficient. 4. Add unmounting of driver's home to `Cleanup()`. Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com> Upstream-commit: a450a575a672b90f02a4b1d3d9300ce1d70a6311 Component: engine
Description
No description provided
Languages
Go
92%
Shell
5.5%
Dockerfile
1.1%
Go-Checksums
0.9%
Makefile
0.3%
Other
0.2%