mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 04:07:44 +00:00
Kernel: Make FileSystem::root_inode() return a plain Inode&
All file system classes are expected to keep their root Inode object in memory, so this function can safely return an Inode&.
This commit is contained in:
parent
58c6d30f6a
commit
1f18558ee2
16 changed files with 20 additions and 21 deletions
|
@ -61,7 +61,7 @@ bool DevFS::initialize()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
NonnullRefPtr<Inode> DevFS::root_inode() const
|
Inode& DevFS::root_inode()
|
||||||
{
|
{
|
||||||
return *m_root_inode;
|
return *m_root_inode;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ public:
|
||||||
void notify_new_device(Device&);
|
void notify_new_device(Device&);
|
||||||
void notify_device_removal(Device&);
|
void notify_device_removal(Device&);
|
||||||
|
|
||||||
virtual NonnullRefPtr<Inode> root_inode() const override;
|
virtual Inode& root_inode() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DevFS();
|
DevFS();
|
||||||
|
|
|
@ -51,7 +51,7 @@ static InodeIndex pty_index_to_inode_index(unsigned pty_index)
|
||||||
return pty_index + 2;
|
return pty_index + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
NonnullRefPtr<Inode> DevPtsFS::root_inode() const
|
Inode& DevPtsFS::root_inode()
|
||||||
{
|
{
|
||||||
return *m_root_inode;
|
return *m_root_inode;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public:
|
||||||
virtual bool initialize() override;
|
virtual bool initialize() override;
|
||||||
virtual StringView class_name() const override { return "DevPtsFS"sv; }
|
virtual StringView class_name() const override { return "DevPtsFS"sv; }
|
||||||
|
|
||||||
virtual NonnullRefPtr<Inode> root_inode() const override;
|
virtual Inode& root_inode() override;
|
||||||
|
|
||||||
static void register_slave_pty(SlavePTY&);
|
static void register_slave_pty(SlavePTY&);
|
||||||
static void unregister_slave_pty(SlavePTY&);
|
static void unregister_slave_pty(SlavePTY&);
|
||||||
|
|
|
@ -154,7 +154,7 @@ bool Ext2FS::initialize()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
NonnullRefPtr<Inode> Ext2FS::root_inode() const
|
Ext2FSInode& Ext2FS::root_inode()
|
||||||
{
|
{
|
||||||
return *m_root_inode;
|
return *m_root_inode;
|
||||||
}
|
}
|
||||||
|
|
|
@ -128,7 +128,7 @@ private:
|
||||||
bool flush_super_block();
|
bool flush_super_block();
|
||||||
|
|
||||||
virtual StringView class_name() const override { return "Ext2FS"sv; }
|
virtual StringView class_name() const override { return "Ext2FS"sv; }
|
||||||
virtual NonnullRefPtr<Inode> root_inode() const override;
|
virtual Ext2FSInode& root_inode() override;
|
||||||
RefPtr<Inode> get_inode(InodeIdentifier) const;
|
RefPtr<Inode> get_inode(InodeIdentifier) const;
|
||||||
KResultOr<NonnullRefPtr<Inode>> create_inode(Ext2FSInode& parent_inode, const String& name, mode_t, dev_t, uid_t, gid_t);
|
KResultOr<NonnullRefPtr<Inode>> create_inode(Ext2FSInode& parent_inode, const String& name, mode_t, dev_t, uid_t, gid_t);
|
||||||
KResult create_directory(Ext2FSInode& parent_inode, const String& name, mode_t, uid_t, gid_t);
|
KResult create_directory(Ext2FSInode& parent_inode, const String& name, mode_t, uid_t, gid_t);
|
||||||
|
|
|
@ -33,7 +33,7 @@ public:
|
||||||
|
|
||||||
virtual bool initialize() = 0;
|
virtual bool initialize() = 0;
|
||||||
virtual StringView class_name() const = 0;
|
virtual StringView class_name() const = 0;
|
||||||
virtual NonnullRefPtr<Inode> root_inode() const = 0;
|
virtual Inode& root_inode() = 0;
|
||||||
virtual bool supports_watchers() const { return false; }
|
virtual bool supports_watchers() const { return false; }
|
||||||
|
|
||||||
bool is_readonly() const { return m_readonly; }
|
bool is_readonly() const { return m_readonly; }
|
||||||
|
|
|
@ -243,7 +243,7 @@ Plan9FS::ProtocolVersion Plan9FS::parse_protocol_version(const StringView& s) co
|
||||||
return ProtocolVersion::v9P2000;
|
return ProtocolVersion::v9P2000;
|
||||||
}
|
}
|
||||||
|
|
||||||
NonnullRefPtr<Inode> Plan9FS::root_inode() const
|
Inode& Plan9FS::root_inode()
|
||||||
{
|
{
|
||||||
return *m_root_inode;
|
return *m_root_inode;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ public:
|
||||||
|
|
||||||
virtual bool supports_watchers() const override { return false; }
|
virtual bool supports_watchers() const override { return false; }
|
||||||
|
|
||||||
virtual NonnullRefPtr<Inode> root_inode() const override;
|
virtual Inode& root_inode() override;
|
||||||
|
|
||||||
u16 allocate_tag() { return m_next_tag++; }
|
u16 allocate_tag() { return m_next_tag++; }
|
||||||
u32 allocate_fid() { return m_next_fid++; }
|
u32 allocate_fid() { return m_next_fid++; }
|
||||||
|
|
|
@ -64,7 +64,7 @@ bool ProcFS::initialize()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
NonnullRefPtr<Inode> ProcFS::root_inode() const
|
Inode& ProcFS::root_inode()
|
||||||
{
|
{
|
||||||
return *m_root_inode;
|
return *m_root_inode;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ public:
|
||||||
virtual bool initialize() override;
|
virtual bool initialize() override;
|
||||||
virtual StringView class_name() const override { return "ProcFS"sv; }
|
virtual StringView class_name() const override { return "ProcFS"sv; }
|
||||||
|
|
||||||
virtual NonnullRefPtr<Inode> root_inode() const override;
|
virtual Inode& root_inode() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ProcFS();
|
ProcFS();
|
||||||
|
|
|
@ -80,7 +80,7 @@ bool SysFS::initialize()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
NonnullRefPtr<Inode> SysFS::root_inode() const
|
Inode& SysFS::root_inode()
|
||||||
{
|
{
|
||||||
return *m_root_inode;
|
return *m_root_inode;
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,7 +65,7 @@ public:
|
||||||
virtual bool initialize() override;
|
virtual bool initialize() override;
|
||||||
virtual StringView class_name() const override { return "SysFS"sv; }
|
virtual StringView class_name() const override { return "SysFS"sv; }
|
||||||
|
|
||||||
virtual NonnullRefPtr<Inode> root_inode() const override;
|
virtual Inode& root_inode() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SysFS();
|
SysFS();
|
||||||
|
|
|
@ -30,10 +30,9 @@ bool TmpFS::initialize()
|
||||||
return !m_root_inode.is_null();
|
return !m_root_inode.is_null();
|
||||||
}
|
}
|
||||||
|
|
||||||
NonnullRefPtr<Inode> TmpFS::root_inode() const
|
Inode& TmpFS::root_inode()
|
||||||
{
|
{
|
||||||
VERIFY(!m_root_inode.is_null());
|
VERIFY(!m_root_inode.is_null());
|
||||||
|
|
||||||
return *m_root_inode;
|
return *m_root_inode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ public:
|
||||||
|
|
||||||
virtual bool supports_watchers() const override { return true; }
|
virtual bool supports_watchers() const override { return true; }
|
||||||
|
|
||||||
virtual NonnullRefPtr<Inode> root_inode() const override;
|
virtual Inode& root_inode() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TmpFS();
|
TmpFS();
|
||||||
|
|
|
@ -121,13 +121,13 @@ bool VirtualFileSystem::mount_root(FileSystem& fs)
|
||||||
|
|
||||||
Mount mount { fs, nullptr, root_mount_flags };
|
Mount mount { fs, nullptr, root_mount_flags };
|
||||||
|
|
||||||
auto root_inode = fs.root_inode();
|
auto& root_inode = fs.root_inode();
|
||||||
if (!root_inode->is_directory()) {
|
if (!root_inode.is_directory()) {
|
||||||
dmesgln("VirtualFileSystem: root inode ({}) for / is not a directory :(", root_inode->identifier());
|
dmesgln("VirtualFileSystem: root inode ({}) for / is not a directory :(", root_inode.identifier());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_root_inode = move(root_inode);
|
m_root_inode = root_inode;
|
||||||
dmesgln("VirtualFileSystem: mounted root from {} ({})", fs.class_name(), static_cast<FileBackedFileSystem&>(fs).file_description().absolute_path());
|
dmesgln("VirtualFileSystem: mounted root from {} ({})", fs.class_name(), static_cast<FileBackedFileSystem&>(fs).file_description().absolute_path());
|
||||||
|
|
||||||
m_mounts.append(move(mount));
|
m_mounts.append(move(mount));
|
||||||
|
@ -172,7 +172,7 @@ KResult VirtualFileSystem::traverse_directory_inode(Inode& dir_inode, Function<b
|
||||||
resolved_inode = entry.inode;
|
resolved_inode = entry.inode;
|
||||||
|
|
||||||
// FIXME: This is now broken considering chroot and bind mounts.
|
// FIXME: This is now broken considering chroot and bind mounts.
|
||||||
bool is_root_inode = dir_inode.identifier() == dir_inode.fs().root_inode()->identifier();
|
bool is_root_inode = dir_inode.identifier() == dir_inode.fs().root_inode().identifier();
|
||||||
if (is_root_inode && !is_vfs_root(dir_inode.identifier()) && entry.name == "..") {
|
if (is_root_inode && !is_vfs_root(dir_inode.identifier()) && entry.name == "..") {
|
||||||
auto mount = find_mount_for_guest(dir_inode.identifier());
|
auto mount = find_mount_for_guest(dir_inode.identifier());
|
||||||
VERIFY(mount);
|
VERIFY(mount);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue