Bladeren bron

Kernel/VirtualFileSystem: Count bind mounts towards normal FS mountcount

This is correct since unmount doesn't treat bind mounts specially. If we
don't do this, unmounting bind mounts will call
prepare_for_last_unmount() on the guest FS much too early, which will
most likely fail due to a busy file system.
kleines Filmröllchen 2 jaren geleden
bovenliggende
commit
abc1eaff36
1 gewijzigde bestanden met toevoegingen van 3 en 0 verwijderingen
  1. 3 0
      Kernel/FileSystem/VirtualFileSystem.cpp

+ 3 - 0
Kernel/FileSystem/VirtualFileSystem.cpp

@@ -217,6 +217,9 @@ ErrorOr<void> VirtualFileSystem::bind_mount(Custody& source, Custody& mount_poin
             return EBUSY;
         }
 
+        // A bind mount also counts as a normal mount from the perspective of unmount(),
+        // so we need to keep track of it in order for prepare_to_clear_last_mount() to work properly.
+        new_mount->guest_fs().mounted_count({}).with([&](auto& count) { count++; });
         // NOTE: Leak the mount pointer so it can be added to the mount list, but it won't be
         // deleted after being added.
         mounts.append(*new_mount.leak_ptr());