Serenity Operating System
at master 49 lines 1.2 kB view raw
1/* 2 * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/RefPtr.h> 10#include <Kernel/FileSystem/Custody.h> 11#include <Kernel/FileSystem/FileSystem.h> 12#include <Kernel/FileSystem/Inode.h> 13#include <Kernel/Forward.h> 14#include <Kernel/Library/NonnullLockRefPtr.h> 15 16namespace Kernel { 17 18class VirtualFileSystem; 19class Mount { 20 friend class VirtualFileSystem; 21 22public: 23 Mount(FileSystem&, Custody* host_custody, int flags); 24 Mount(Inode& source, Custody& host_custody, int flags); 25 26 RefPtr<Inode const> host() const; 27 RefPtr<Inode> host(); 28 29 Inode const& guest() const { return *m_guest; } 30 Inode& guest() { return *m_guest; } 31 32 FileSystem const& guest_fs() const { return *m_guest_fs; } 33 FileSystem& guest_fs() { return *m_guest_fs; } 34 35 ErrorOr<NonnullOwnPtr<KString>> absolute_path() const; 36 37 int flags() const { return m_flags; } 38 void set_flags(int flags) { m_flags = flags; } 39 40private: 41 NonnullRefPtr<Inode> m_guest; 42 NonnullLockRefPtr<FileSystem> m_guest_fs; 43 SpinlockProtected<RefPtr<Custody>, LockRank::None> m_host_custody; 44 int m_flags; 45 46 IntrusiveListNode<Mount> m_vfs_list_node; 47}; 48 49}