libfs: improve cleanup of shared file mappings

This commit is contained in:
2026-05-30 10:08:07 +01:00
parent aaea926f4d
commit 651ddf7827
3 changed files with 30 additions and 4 deletions
+17 -2
View File
@@ -211,14 +211,29 @@ static enum fs_status handle_vm_request_detach(
}
kern_tracef(
"received vm request (detach) for file %s",
mapping->m_file->f_dent->d_name);
"received vm request (detach) for file %s (ref=%zu)",
mapping->m_file->f_dent->d_name,
mapping->m_ref);
if (mapping->m_ref > 1) {
mapping->m_ref--;
return FS_SUCCESS;
}
struct fs_file *f = mapping->m_file;
switch (mapping->m_type) {
case FILE_MAPPING_PRIVATE:
kern_tracef(
"destroying private mapping of %s",
f->f_dent->d_name);
queue_delete(&f->f_mappings, &mapping->m_entry);
break;
case FILE_MAPPING_SHARED:
kern_tracef(
"destroying shared mapping of %s",
f->f_dent->d_name);
f->f_inode->i_shared_mapping = NULL;
break;
default:
break;
}