kernel/vm: Add "unmergeable" flag to VMCache.

ramfs needs to create caches that are both temporary and unmergeable,
so add another flag to make this state possible.

Otherwise, mmap'ed files from ramfs might wind up in VMCache
trying to merge the caches when the last one is closed, which
we don't want.
This commit is contained in:
Augustin Cavalier 2024-08-14 18:34:02 -04:00
parent 1f1be52007
commit a8877df135
3 changed files with 5 additions and 2 deletions

View File

@ -198,6 +198,7 @@ public:
// TODO: Remove!
uint32 page_count;
uint32 temporary : 1;
uint32 unmergeable : 1;
uint32 type : 6;
#if DEBUG_CACHE_LIST

View File

@ -255,6 +255,7 @@ DataContainer::_SwitchToCacheMode()
return error;
fCache->temporary = 1;
fCache->unmergeable = 1;
fCache->virtual_end = fSize;
error = fCache->Commit(fSize, VM_PRIORITY_USER);

View File

@ -627,8 +627,8 @@ VMCacheRef::VMCacheRef(VMCache* cache)
bool
VMCache::_IsMergeable() const
{
return areas == NULL && temporary && !consumers.IsEmpty()
&& consumers.Head() == consumers.Tail();
return areas == NULL && temporary && !unmergeable
&& !consumers.IsEmpty() && consumers.Head() == consumers.Tail();
}
@ -657,6 +657,7 @@ VMCache::Init(uint32 cacheType, uint32 allocationFlags)
virtual_end = 0;
committed_size = 0;
temporary = 0;
unmergeable = 0;
page_count = 0;
fWiredPagesCount = 0;
type = cacheType;