Sergey Bugaev преди 5 години
родител
ревизия
d395b93b15
променени са 3 файла, в които са добавени 8 реда и са изтрити 5 реда
  1. 4 0
      Kernel/FileSystem/VirtualFileSystem.cpp
  2. 1 2
      Kernel/FileSystem/VirtualFileSystem.h
  3. 3 3
      Kernel/Process.cpp

+ 4 - 0
Kernel/FileSystem/VirtualFileSystem.cpp

@@ -70,6 +70,8 @@ InodeIdentifier VFS::root_inode_id() const
 
 KResult VFS::mount(FS& file_system, Custody& mount_point, int flags)
 {
+    LOCKER(m_lock);
+
     auto& inode = mount_point.inode();
     dbg() << "VFS: Mounting " << file_system.class_name() << " at " << mount_point.absolute_path() << " (inode: " << inode.identifier() << ") with flags " << flags;
     // FIXME: check that this is not already a mount point
@@ -80,6 +82,8 @@ KResult VFS::mount(FS& file_system, Custody& mount_point, int flags)
 
 KResult VFS::bind_mount(Custody& source, Custody& mount_point, int flags)
 {
+    LOCKER(m_lock);
+
     dbg() << "VFS: Bind-mounting " << source.absolute_path() << " at " << mount_point.absolute_path();
     // FIXME: check that this is not already a mount point
     Mount mount { source.inode(), mount_point, flags };

+ 1 - 2
Kernel/FileSystem/VirtualFileSystem.h

@@ -132,8 +132,7 @@ private:
     Lock m_lock { "VFSLock" };
 
     RefPtr<Inode> m_root_inode;
-    Vector<Mount> m_mounts;
-
+    Vector<Mount, 16> m_mounts;
     RefPtr<Custody> m_root_custody;
 };
 

+ 3 - 3
Kernel/Process.cpp

@@ -4088,7 +4088,7 @@ int Process::sys$mount(const Syscall::SC_mount_params* user_params)
     auto target = validate_and_copy_string_from_user(params.target);
     auto fs_type = validate_and_copy_string_from_user(params.fs_type);
 
-    if (target.is_null() || fs_type.is_null())
+    if (target.is_null())
         return -EFAULT;
 
     auto description = file_description(source_fd);
@@ -4103,8 +4103,6 @@ int Process::sys$mount(const Syscall::SC_mount_params* user_params)
 
     auto& target_custody = custody_or_error.value();
 
-    RefPtr<FS> fs;
-
     if (params.flags & MS_BIND) {
         // We're doing a bind mount.
         if (description.is_null())
@@ -4116,6 +4114,8 @@ int Process::sys$mount(const Syscall::SC_mount_params* user_params)
         return VFS::the().bind_mount(*description->custody(), target_custody, params.flags);
     }
 
+    RefPtr<FS> fs;
+
     if (fs_type == "ext2" || fs_type == "Ext2FS") {
         if (description.is_null())
             return -EBADF;