diff options
author | Nicolas Lacasse <nlacasse@google.com> | 2019-04-10 11:26:10 -0700 |
---|---|---|
committer | Shentubot <shentubot@google.com> | 2019-04-10 11:27:16 -0700 |
commit | 0a0619216ec9ca96c181dd69d9bf31e7762090cb (patch) | |
tree | c440473917bd7841b51f7a1e47c21352a5dbeefe /pkg/sentry/fs | |
parent | 7140b1fdca1cc9c9c711955a49e6e7fc41f339d9 (diff) |
Start saving MountSource.DirentCache.
DirentCache is already a savable type, and it ensures that it is empty at the
point of Save. There is no reason not to save it along with the MountSource.
This did uncover an issue where not all MountSources were properly flushed
before Save. If a mount point has an open file and is then unmounted, we save
the MountSource without flushing it first. This CL also fixes that by flushing
all MountSources for all open FDs on Save.
PiperOrigin-RevId: 242906637
Change-Id: I3acd9d52b6ce6b8c989f835a408016cb3e67018f
Diffstat (limited to 'pkg/sentry/fs')
-rw-r--r-- | pkg/sentry/fs/BUILD | 1 | ||||
-rw-r--r-- | pkg/sentry/fs/mount.go | 2 | ||||
-rw-r--r-- | pkg/sentry/fs/mount_state.go | 25 |
3 files changed, 1 insertions, 27 deletions
diff --git a/pkg/sentry/fs/BUILD b/pkg/sentry/fs/BUILD index dda6a0c9f..1742d3a65 100644 --- a/pkg/sentry/fs/BUILD +++ b/pkg/sentry/fs/BUILD @@ -32,7 +32,6 @@ go_library( "mock.go", "mount.go", "mount_overlay.go", - "mount_state.go", "mounts.go", "offset.go", "overlay.go", diff --git a/pkg/sentry/fs/mount.go b/pkg/sentry/fs/mount.go index dd6e64b4c..5cc777bef 100644 --- a/pkg/sentry/fs/mount.go +++ b/pkg/sentry/fs/mount.go @@ -119,7 +119,7 @@ type MountSource struct { // fscache keeps Dirents pinned beyond application references to them. // It must be flushed before kernel.SaveTo. - fscache *DirentCache `state:"nosave"` + fscache *DirentCache // direntRefs is the sum of references on all Dirents in this MountSource. // diff --git a/pkg/sentry/fs/mount_state.go b/pkg/sentry/fs/mount_state.go deleted file mode 100644 index 6344d5160..000000000 --- a/pkg/sentry/fs/mount_state.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package fs - -// afterLoad is invoked by stateify. -// -// Beyond the cache, this method's existence is required to ensure that this -// object is not marked "complete" until all dependent objects are also marked -// "complete". Implementations (e.g. see gofer_state.go) reach into the -// MountSourceOperations through this object, this is necessary on restore. -func (msrc *MountSource) afterLoad() { - msrc.fscache = NewDirentCache(defaultDirentCacheSize) -} |