libfs: improve cleanup of shared file mappings
This commit is contained in:
+17
-2
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user