diff options
author | gVisor bot <gvisor-bot@google.com> | 2019-06-11 22:02:41 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2019-06-11 22:02:41 +0000 |
commit | 8fdc4dc78ce6e1b1abb50819beb6d874a80ce0da (patch) | |
tree | 1aa4ce30068cefd0060b9ad25bfa09c49553431b /pkg/sentry/fs/tmpfs/fs.go | |
parent | cec05f7aae67555a87d5ff2c1e55f5a061247712 (diff) | |
parent | fc746efa9ad57a5001a6328c52622adafa1d3ffe (diff) |
Merge fc746efa (automated)
Diffstat (limited to 'pkg/sentry/fs/tmpfs/fs.go')
-rw-r--r-- | pkg/sentry/fs/tmpfs/fs.go | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/pkg/sentry/fs/tmpfs/fs.go b/pkg/sentry/fs/tmpfs/fs.go index b7c29a4d1..83e1bf247 100644 --- a/pkg/sentry/fs/tmpfs/fs.go +++ b/pkg/sentry/fs/tmpfs/fs.go @@ -34,6 +34,16 @@ const ( // GID for the root directory. rootGIDKey = "gid" + // cacheKey sets the caching policy for the mount. + cacheKey = "cache" + + // cacheAll uses the virtual file system cache for everything (default). + cacheAll = "cache" + + // cacheRevalidate allows dirents to be cached, but revalidates them on each + // lookup. + cacheRevalidate = "revalidate" + // TODO(edahlgren/mpratt): support a tmpfs size limit. // size = "size" @@ -122,15 +132,24 @@ func (f *Filesystem) Mount(ctx context.Context, device string, flags fs.MountSou delete(options, rootGIDKey) } + // Construct a mount which will follow the cache options provided. + var msrc *fs.MountSource + switch options[cacheKey] { + case "", cacheAll: + msrc = fs.NewCachingMountSource(f, flags) + case cacheRevalidate: + msrc = fs.NewRevalidatingMountSource(f, flags) + default: + return nil, fmt.Errorf("invalid cache policy option %q", options[cacheKey]) + } + delete(options, cacheKey) + // Fail if the caller passed us more options than we can parse. They may be // expecting us to set something we can't set. if len(options) > 0 { return nil, fmt.Errorf("unsupported mount options: %v", options) } - // Construct a mount which will cache dirents. - msrc := fs.NewCachingMountSource(f, flags) - // Construct the tmpfs root. return NewDir(ctx, nil, owner, perms, msrc), nil } |