Fix single-VMA chunk range conflict due to mremap locking order

This commit is contained in:
Hui, Chunyang 2022-04-14 03:38:55 +00:00 committed by volcano
parent fbde30d1c3
commit 70dbf84782

@ -424,8 +424,9 @@ impl VMManager {
// Try merging all connecting chunks // Try merging all connecting chunks
{ {
let mut merged_vmas = current.vm().merge_all_single_vma_chunks()?; // Must lock the internal manager first here in case the chunk's range and vma are conflict when other threads are operating the VM
let mut internal_manager = self.internal.lock().unwrap(); let mut internal_manager = self.internal.lock().unwrap();
let mut merged_vmas = current.vm().merge_all_single_vma_chunks()?;
while merged_vmas.len() != 0 { while merged_vmas.len() != 0 {
let merged_vma = merged_vmas.pop().unwrap(); let merged_vma = merged_vmas.pop().unwrap();
internal_manager.add_new_chunk(&current, merged_vma); internal_manager.add_new_chunk(&current, merged_vma);