From 949dc1d096aa9ac58c73cc861b95c8172d82dfcd Mon Sep 17 00:00:00 2001 From: Ayush Ranjan Date: Fri, 6 Nov 2020 13:12:26 -0800 Subject: [vfs] overlayfs: Do not unlink non-existing whiteout during file creation. We can reuse information about whether a whiteout exists on a given file path from stepLocked when creating a file at that path. This helps save an Unlink call to the upper filesystem if the whiteout does NOT exist (common case). Plumbs this information from lookupLocked() -> getChildLocked() -> stepLocked(). This also helped save a Lookup in RenameAt(). Fixes #1199 PiperOrigin-RevId: 341105351 --- pkg/sentry/fsimpl/overlay/overlay.go | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'pkg/sentry/fsimpl/overlay/overlay.go') diff --git a/pkg/sentry/fsimpl/overlay/overlay.go b/pkg/sentry/fsimpl/overlay/overlay.go index f6c58f2e7..73130bc8d 100644 --- a/pkg/sentry/fsimpl/overlay/overlay.go +++ b/pkg/sentry/fsimpl/overlay/overlay.go @@ -696,6 +696,13 @@ func (d *dentry) topLayer() vfs.VirtualDentry { return vd } +func (d *dentry) topLookupLayer() lookupLayer { + if d.upperVD.Ok() { + return lookupLayerUpper + } + return lookupLayerLower +} + func (d *dentry) checkPermissions(creds *auth.Credentials, ats vfs.AccessTypes) error { return vfs.GenericCheckPermissions(creds, ats, linux.FileMode(atomic.LoadUint32(&d.mode)), auth.KUID(atomic.LoadUint32(&d.uid)), auth.KGID(atomic.LoadUint32(&d.gid))) } -- cgit v1.2.3