diff --git a/kernel/fs/vfs.c b/kernel/fs/vfs.c index 1653964..37d0ab3 100644 --- a/kernel/fs/vfs.c +++ b/kernel/fs/vfs.c @@ -168,16 +168,21 @@ void vfs_procgroup_cleanup (struct procgroup* procgroup) { for (size_t i = 0; i < lengthof (mount_table.mountpoint_buckets); i++) { struct hash_node_link* link = mount_table.mountpoint_buckets[i]; - struct vfs_mountpoint* vmp = hash_entry (link, struct vfs_mountpoint, mount_table_link); - spin_lock (&vmp->lock); + while (link != NULL) { + struct vfs_mountpoint* vmp = hash_entry (link, struct vfs_mountpoint, mount_table_link); - if (vmp->ownerpg == procgroup) { - vmp->locked = false; - vmp->ownerpg = NULL; + spin_lock (&vmp->lock); + + if (vmp->ownerpg == procgroup) { + vmp->locked = false; + vmp->ownerpg = NULL; + } + + spin_unlock (&vmp->lock); + + link = link->next; } - - spin_unlock (&vmp->lock); } spin_unlock (&mount_table.lock);