mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-27 21:21:50 +03:00
Kernel: Simplify Mount internals
- The host custody never changes after initialization, so there's no need to protect it with a spinlock. - To enforce the fact that some members don't change after initialization, make them const.
This commit is contained in:
parent
673592dea8
commit
19084ef743
Notes:
sideshowbarker
2024-07-17 11:29:41 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/19084ef743 Pull-request: https://github.com/SerenityOS/serenity/pull/18163 Reviewed-by: https://github.com/Hendiadyoin1
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
@ -11,47 +11,41 @@
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
Mount::Mount(NonnullRefPtr<FileSystem> guest_fs, Custody* host_custody, int flags)
|
||||
: m_guest(guest_fs->root_inode())
|
||||
, m_guest_fs(guest_fs)
|
||||
, m_host_custody(host_custody)
|
||||
Mount::Mount(NonnullRefPtr<FileSystem> guest_fs, RefPtr<Custody> host_custody, int flags)
|
||||
: m_guest_fs(move(guest_fs))
|
||||
, m_guest(m_guest_fs->root_inode())
|
||||
, m_host_custody(move(host_custody))
|
||||
, m_flags(flags)
|
||||
{
|
||||
}
|
||||
|
||||
Mount::Mount(Inode& source, Custody& host_custody, int flags)
|
||||
: m_guest(source)
|
||||
, m_guest_fs(source.fs())
|
||||
, m_host_custody(host_custody)
|
||||
Mount::Mount(NonnullRefPtr<Inode> source, NonnullRefPtr<Custody> host_custody, int flags)
|
||||
: m_guest_fs(source->fs())
|
||||
, m_guest(move(source))
|
||||
, m_host_custody(move(host_custody))
|
||||
, m_flags(flags)
|
||||
{
|
||||
}
|
||||
|
||||
ErrorOr<NonnullOwnPtr<KString>> Mount::absolute_path() const
|
||||
{
|
||||
return m_host_custody.with([&](auto& host_custody) -> ErrorOr<NonnullOwnPtr<KString>> {
|
||||
if (!host_custody)
|
||||
return KString::try_create("/"sv);
|
||||
return host_custody->try_serialize_absolute_path();
|
||||
});
|
||||
if (!m_host_custody)
|
||||
return KString::try_create("/"sv);
|
||||
return m_host_custody->try_serialize_absolute_path();
|
||||
}
|
||||
|
||||
RefPtr<Inode> Mount::host()
|
||||
{
|
||||
return m_host_custody.with([](auto& host_custody) -> RefPtr<Inode> {
|
||||
if (!host_custody)
|
||||
return nullptr;
|
||||
return &host_custody->inode();
|
||||
});
|
||||
if (!m_host_custody)
|
||||
return nullptr;
|
||||
return m_host_custody->inode();
|
||||
}
|
||||
|
||||
RefPtr<Inode const> Mount::host() const
|
||||
{
|
||||
return m_host_custody.with([](auto& host_custody) -> RefPtr<Inode const> {
|
||||
if (!host_custody)
|
||||
return nullptr;
|
||||
return &host_custody->inode();
|
||||
});
|
||||
if (!m_host_custody)
|
||||
return nullptr;
|
||||
return m_host_custody->inode();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
@ -17,11 +17,13 @@ namespace Kernel {
|
||||
|
||||
class VirtualFileSystem;
|
||||
class Mount {
|
||||
AK_MAKE_NONCOPYABLE(Mount);
|
||||
AK_MAKE_NONMOVABLE(Mount);
|
||||
friend class VirtualFileSystem;
|
||||
|
||||
public:
|
||||
Mount(NonnullRefPtr<FileSystem>, Custody* host_custody, int flags);
|
||||
Mount(Inode& source, Custody& host_custody, int flags);
|
||||
Mount(NonnullRefPtr<FileSystem>, RefPtr<Custody> host_custody, int flags);
|
||||
Mount(NonnullRefPtr<Inode> source, NonnullRefPtr<Custody> host_custody, int flags);
|
||||
|
||||
RefPtr<Inode const> host() const;
|
||||
RefPtr<Inode> host();
|
||||
@ -38,10 +40,10 @@ public:
|
||||
void set_flags(int flags) { m_flags = flags; }
|
||||
|
||||
private:
|
||||
NonnullRefPtr<Inode> m_guest;
|
||||
NonnullRefPtr<FileSystem> m_guest_fs;
|
||||
SpinlockProtected<RefPtr<Custody>, LockRank::None> m_host_custody;
|
||||
int m_flags;
|
||||
NonnullRefPtr<FileSystem> const m_guest_fs;
|
||||
NonnullRefPtr<Inode> const m_guest;
|
||||
RefPtr<Custody> const m_host_custody;
|
||||
int m_flags { 0 };
|
||||
|
||||
IntrusiveListNode<Mount> m_vfs_list_node;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user