graphdriver/copy: faster copy of hard links

The DirCopy() function in "graphdriver/copy/copy.go" has a special case for
skip file-attribute copying when making a hard link to an already-copied
file, if "copyMode == Hardlink". Do the same for copies of hard-links in
the source filesystem.

Significantly speeds up vfs's copy of a BusyBox filesystem (which
consists mainly of hard links to a single binary), making moby's
integration tests run more quickly and more reliably in a dev container.

Fixes #46810

Signed-off-by: Rob Murray <rob.murray@docker.com>
This commit is contained in:
Rob Murray 2023-11-13 18:22:03 +00:00
parent 6af7d6ea2d
commit a3fdad84ad

View file

@ -159,6 +159,7 @@ func DirCopy(srcDir, dstDir string, copyMode Mode, copyOpaqueXattrs bool) error
return err2
}
} else if hardLinkDstPath, ok := copiedFiles[id]; ok {
isHardlink = true
if err2 := os.Link(hardLinkDstPath, dstPath); err2 != nil {
return err2
}