diff options
-rw-r--r-- | pkg/sentry/fsimpl/tmpfs/regular_file.go | 2 | ||||
-rw-r--r-- | pkg/sentry/fsimpl/tmpfs/tmpfs.go | 14 | ||||
-rw-r--r-- | pkg/sentry/fsimpl/tmpfs/tmpfs_state_autogen.go | 14 |
3 files changed, 25 insertions, 5 deletions
diff --git a/pkg/sentry/fsimpl/tmpfs/regular_file.go b/pkg/sentry/fsimpl/tmpfs/regular_file.go index 0f2ac6144..453e1aa61 100644 --- a/pkg/sentry/fsimpl/tmpfs/regular_file.go +++ b/pkg/sentry/fsimpl/tmpfs/regular_file.go @@ -95,7 +95,7 @@ type regularFile struct { func (fs *filesystem) newRegularFile(kuid auth.KUID, kgid auth.KGID, mode linux.FileMode, parentDir *directory) *inode { file := ®ularFile{ memFile: fs.mfp.MemoryFile(), - memoryUsageKind: usage.Tmpfs, + memoryUsageKind: fs.usage, seals: linux.F_SEAL_SEAL, } file.inode.init(file, fs, kuid, kgid, linux.S_IFREG|mode, parentDir) diff --git a/pkg/sentry/fsimpl/tmpfs/tmpfs.go b/pkg/sentry/fsimpl/tmpfs/tmpfs.go index feafb06e4..f84165aba 100644 --- a/pkg/sentry/fsimpl/tmpfs/tmpfs.go +++ b/pkg/sentry/fsimpl/tmpfs/tmpfs.go @@ -41,6 +41,7 @@ import ( "gvisor.dev/gvisor/pkg/sentry/kernel/auth" "gvisor.dev/gvisor/pkg/sentry/kernel/time" "gvisor.dev/gvisor/pkg/sentry/pgalloc" + "gvisor.dev/gvisor/pkg/sentry/usage" "gvisor.dev/gvisor/pkg/sentry/vfs" "gvisor.dev/gvisor/pkg/sentry/vfs/memxattr" "gvisor.dev/gvisor/pkg/sync" @@ -74,6 +75,10 @@ type filesystem struct { // filesystem. Immutable. mopts string + // usage is the memory accounting category under which pages backing + // files in this filesystem are accounted. + usage usage.MemoryKind + // mu serializes changes to the Dentry tree. mu sync.RWMutex `state:"nosave"` @@ -106,6 +111,10 @@ type FilesystemOpts struct { // tmpfs filesystem. This allows tmpfs to "impersonate" other // filesystems, like ramdiskfs and cgroupfs. FilesystemType vfs.FilesystemType + + // Usage is the memory accounting category under which pages backing files in + // the filesystem are accounted. + Usage *usage.MemoryKind } // GetFilesystem implements vfs.FilesystemType.GetFilesystem. @@ -184,11 +193,16 @@ func (fstype FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt return nil, nil, err } clock := time.RealtimeClockFromContext(ctx) + memUsage := usage.Tmpfs + if tmpfsOpts.Usage != nil { + memUsage = *tmpfsOpts.Usage + } fs := filesystem{ mfp: mfp, clock: clock, devMinor: devMinor, mopts: opts.Data, + usage: memUsage, } fs.vfsfs.Init(vfsObj, newFSType, &fs) diff --git a/pkg/sentry/fsimpl/tmpfs/tmpfs_state_autogen.go b/pkg/sentry/fsimpl/tmpfs/tmpfs_state_autogen.go index 6d9f09eef..9a30a69a3 100644 --- a/pkg/sentry/fsimpl/tmpfs/tmpfs_state_autogen.go +++ b/pkg/sentry/fsimpl/tmpfs/tmpfs_state_autogen.go @@ -377,6 +377,7 @@ func (fs *filesystem) StateFields() []string { "clock", "devMinor", "mopts", + "usage", "nextInoMinusOne", "root", } @@ -392,8 +393,9 @@ func (fs *filesystem) StateSave(stateSinkObject state.Sink) { stateSinkObject.Save(2, &fs.clock) stateSinkObject.Save(3, &fs.devMinor) stateSinkObject.Save(4, &fs.mopts) - stateSinkObject.Save(5, &fs.nextInoMinusOne) - stateSinkObject.Save(6, &fs.root) + stateSinkObject.Save(5, &fs.usage) + stateSinkObject.Save(6, &fs.nextInoMinusOne) + stateSinkObject.Save(7, &fs.root) } func (fs *filesystem) afterLoad() {} @@ -405,8 +407,9 @@ func (fs *filesystem) StateLoad(stateSourceObject state.Source) { stateSourceObject.Load(2, &fs.clock) stateSourceObject.Load(3, &fs.devMinor) stateSourceObject.Load(4, &fs.mopts) - stateSourceObject.Load(5, &fs.nextInoMinusOne) - stateSourceObject.Load(6, &fs.root) + stateSourceObject.Load(5, &fs.usage) + stateSourceObject.Load(6, &fs.nextInoMinusOne) + stateSourceObject.Load(7, &fs.root) } func (f *FilesystemOpts) StateTypeName() string { @@ -418,6 +421,7 @@ func (f *FilesystemOpts) StateFields() []string { "RootFileType", "RootSymlinkTarget", "FilesystemType", + "Usage", } } @@ -429,6 +433,7 @@ func (f *FilesystemOpts) StateSave(stateSinkObject state.Sink) { stateSinkObject.Save(0, &f.RootFileType) stateSinkObject.Save(1, &f.RootSymlinkTarget) stateSinkObject.Save(2, &f.FilesystemType) + stateSinkObject.Save(3, &f.Usage) } func (f *FilesystemOpts) afterLoad() {} @@ -438,6 +443,7 @@ func (f *FilesystemOpts) StateLoad(stateSourceObject state.Source) { stateSourceObject.Load(0, &f.RootFileType) stateSourceObject.Load(1, &f.RootSymlinkTarget) stateSourceObject.Load(2, &f.FilesystemType) + stateSourceObject.Load(3, &f.Usage) } func (d *dentry) StateTypeName() string { |