diff options
author | Michael Pratt <mpratt@google.com> | 2018-07-17 13:03:03 -0700 |
---|---|---|
committer | Shentubot <shentubot@google.com> | 2018-07-17 13:03:59 -0700 |
commit | 733ebe7c09404ea2e443e12143edc768a81cd415 (patch) | |
tree | 78cddccab9306e1518b8315660c4ca87e39760cb /pkg/sentry/platform/filemem | |
parent | ed2e03d3780b8d96b189c1311c92b9db2fbcb35a (diff) |
Merge FileMem.usage in IncRef
Per the doc, usage must be kept maximally merged. Beyond that, it is simply a
good idea to keep fragmentation in usage to a minimum.
The glibc malloc allocator allocates one page at a time, potentially causing
lots of fragmentation. However, those pages are likely to have the same number
of references, often making it possible to merge ranges.
PiperOrigin-RevId: 204960339
Change-Id: I03a050cf771c29a4f05b36eaf75b1a09c9465e14
Diffstat (limited to 'pkg/sentry/platform/filemem')
-rw-r--r-- | pkg/sentry/platform/filemem/filemem.go | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/pkg/sentry/platform/filemem/filemem.go b/pkg/sentry/platform/filemem/filemem.go index 6c8b95578..870274ae1 100644 --- a/pkg/sentry/platform/filemem/filemem.go +++ b/pkg/sentry/platform/filemem/filemem.go @@ -547,6 +547,8 @@ func (f *FileMem) IncRef(fr platform.FileRange) { if gap.Ok() { panic(fmt.Sprintf("IncRef(%v): attempted to IncRef on unallocated pages %v:\n%v", fr, gap.Range(), &f.usage)) } + + f.usage.MergeAdjacent(fr) } // DecRef implements platform.File.DecRef. |