mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 19:37:35 +00:00
Kernel: Use DistinctNumeric for filesystem ID's
This patch adds the FileSystemID type, which is a distinct u32. This prevents accidental conversion from arbitrary integers.
This commit is contained in:
parent
7c57961c61
commit
e08d213830
18 changed files with 36 additions and 35 deletions
|
@ -91,7 +91,7 @@ ErrorOr<size_t> SysFSUSBDeviceInformation::read_bytes(off_t offset, size_t count
|
||||||
return nread;
|
return nread;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> SysFSUSBBusDirectory::traverse_as_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
ErrorOr<void> SysFSUSBBusDirectory::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
||||||
{
|
{
|
||||||
SpinlockLocker lock(m_lock);
|
SpinlockLocker lock(m_lock);
|
||||||
// Note: if the parent directory is null, it means something bad happened as this should not happen for the USB directory.
|
// Note: if the parent directory is null, it means something bad happened as this should not happen for the USB directory.
|
||||||
|
|
|
@ -46,7 +46,7 @@ public:
|
||||||
void plug(USB::Device&);
|
void plug(USB::Device&);
|
||||||
void unplug(USB::Device&);
|
void unplug(USB::Device&);
|
||||||
|
|
||||||
virtual ErrorOr<void> traverse_as_directory(unsigned, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
virtual ErrorOr<void> traverse_as_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
||||||
virtual RefPtr<SysFSComponent> lookup(StringView name) override;
|
virtual RefPtr<SysFSComponent> lookup(StringView name) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -45,7 +45,7 @@ SysFSBlockDevicesDirectory::SysFSBlockDevicesDirectory(SysFSDevicesDirectory con
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> SysFSBlockDevicesDirectory::traverse_as_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
ErrorOr<void> SysFSBlockDevicesDirectory::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
||||||
{
|
{
|
||||||
VERIFY(m_parent_directory);
|
VERIFY(m_parent_directory);
|
||||||
TRY(callback({ ".", { fsid, component_index() }, 0 }));
|
TRY(callback({ ".", { fsid, component_index() }, 0 }));
|
||||||
|
@ -82,7 +82,7 @@ SysFSCharacterDevicesDirectory::SysFSCharacterDevicesDirectory(SysFSDevicesDirec
|
||||||
: SysFSDirectory("char"sv, devices_directory)
|
: SysFSDirectory("char"sv, devices_directory)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
ErrorOr<void> SysFSCharacterDevicesDirectory::traverse_as_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
ErrorOr<void> SysFSCharacterDevicesDirectory::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
||||||
{
|
{
|
||||||
VERIFY(m_parent_directory);
|
VERIFY(m_parent_directory);
|
||||||
TRY(callback({ ".", { fsid, component_index() }, 0 }));
|
TRY(callback({ ".", { fsid, component_index() }, 0 }));
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
static u32 s_lastFileSystemID;
|
static u32 s_lastFileSystemID;
|
||||||
static Singleton<HashMap<u32, FileSystem*>> s_file_system_map;
|
static Singleton<HashMap<FileSystemID, FileSystem*>> s_file_system_map;
|
||||||
|
|
||||||
static HashMap<u32, FileSystem*>& all_file_systems()
|
static HashMap<FileSystemID, FileSystem*>& all_file_systems()
|
||||||
{
|
{
|
||||||
return *s_file_system_map;
|
return *s_file_system_map;
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ FileSystem::~FileSystem()
|
||||||
s_file_system_map->remove(m_fsid);
|
s_file_system_map->remove(m_fsid);
|
||||||
}
|
}
|
||||||
|
|
||||||
FileSystem* FileSystem::from_fsid(u32 id)
|
FileSystem* FileSystem::from_fsid(FileSystemID id)
|
||||||
{
|
{
|
||||||
auto it = all_file_systems().find(id);
|
auto it = all_file_systems().find(id);
|
||||||
if (it != all_file_systems().end())
|
if (it != all_file_systems().end())
|
||||||
|
|
|
@ -26,8 +26,8 @@ class FileSystem : public RefCounted<FileSystem> {
|
||||||
public:
|
public:
|
||||||
virtual ~FileSystem();
|
virtual ~FileSystem();
|
||||||
|
|
||||||
unsigned fsid() const { return m_fsid; }
|
FileSystemID fsid() const { return m_fsid; }
|
||||||
static FileSystem* from_fsid(u32);
|
static FileSystem* from_fsid(FileSystemID);
|
||||||
static void sync();
|
static void sync();
|
||||||
static void lock_all();
|
static void lock_all();
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ protected:
|
||||||
mutable Mutex m_lock { "FS" };
|
mutable Mutex m_lock { "FS" };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned m_fsid { 0 };
|
FileSystemID m_fsid;
|
||||||
u64 m_block_size { 0 };
|
u64 m_block_size { 0 };
|
||||||
size_t m_fragment_size { 0 };
|
size_t m_fragment_size { 0 };
|
||||||
bool m_readonly { false };
|
bool m_readonly { false };
|
||||||
|
@ -94,7 +94,7 @@ namespace AK {
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct Traits<Kernel::InodeIdentifier> : public GenericTraits<Kernel::InodeIdentifier> {
|
struct Traits<Kernel::InodeIdentifier> : public GenericTraits<Kernel::InodeIdentifier> {
|
||||||
static unsigned hash(const Kernel::InodeIdentifier& inode) { return pair_int_hash(inode.fsid(), inode.index().value()); }
|
static unsigned hash(const Kernel::InodeIdentifier& inode) { return pair_int_hash(inode.fsid().value(), inode.index().value()); }
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ public:
|
||||||
|
|
||||||
FileSystem& fs() { return m_file_system; }
|
FileSystem& fs() { return m_file_system; }
|
||||||
FileSystem const& fs() const { return m_file_system; }
|
FileSystem const& fs() const { return m_file_system; }
|
||||||
unsigned fsid() const { return m_file_system.fsid(); }
|
FileSystemID fsid() const { return m_file_system.fsid(); }
|
||||||
InodeIndex index() const { return m_index; }
|
InodeIndex index() const { return m_index; }
|
||||||
|
|
||||||
size_t size() const { return metadata().size; }
|
size_t size() const { return metadata().size; }
|
||||||
|
|
|
@ -15,12 +15,13 @@ namespace Kernel {
|
||||||
class FileSystem;
|
class FileSystem;
|
||||||
struct InodeMetadata;
|
struct InodeMetadata;
|
||||||
|
|
||||||
|
TYPEDEF_DISTINCT_ORDERED_ID(u32, FileSystemID);
|
||||||
TYPEDEF_DISTINCT_ORDERED_ID(u64, InodeIndex);
|
TYPEDEF_DISTINCT_ORDERED_ID(u64, InodeIndex);
|
||||||
|
|
||||||
class InodeIdentifier {
|
class InodeIdentifier {
|
||||||
public:
|
public:
|
||||||
InodeIdentifier() = default;
|
InodeIdentifier() = default;
|
||||||
InodeIdentifier(u32 fsid, InodeIndex inode)
|
InodeIdentifier(FileSystemID fsid, InodeIndex inode)
|
||||||
: m_fsid(fsid)
|
: m_fsid(fsid)
|
||||||
, m_index(inode)
|
, m_index(inode)
|
||||||
{
|
{
|
||||||
|
@ -28,7 +29,7 @@ public:
|
||||||
|
|
||||||
bool is_valid() const { return m_fsid != 0 && m_index != 0; }
|
bool is_valid() const { return m_fsid != 0 && m_index != 0; }
|
||||||
|
|
||||||
u32 fsid() const { return m_fsid; }
|
FileSystemID fsid() const { return m_fsid; }
|
||||||
InodeIndex index() const { return m_index; }
|
InodeIndex index() const { return m_index; }
|
||||||
|
|
||||||
FileSystem* fs();
|
FileSystem* fs();
|
||||||
|
@ -45,7 +46,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u32 m_fsid { 0 };
|
FileSystemID m_fsid { 0 };
|
||||||
InodeIndex m_index { 0 };
|
InodeIndex m_index { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ NonnullRefPtr<SysFSRootDirectory> SysFSRootDirectory::create()
|
||||||
return adopt_ref(*new (nothrow) SysFSRootDirectory);
|
return adopt_ref(*new (nothrow) SysFSRootDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> SysFSRootDirectory::traverse_as_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
ErrorOr<void> SysFSRootDirectory::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
||||||
{
|
{
|
||||||
MutexLocker locker(SysFSComponentRegistry::the().get_lock());
|
MutexLocker locker(SysFSComponentRegistry::the().get_lock());
|
||||||
TRY(callback({ ".", { fsid, component_index() }, 0 }));
|
TRY(callback({ ".", { fsid, component_index() }, 0 }));
|
||||||
|
|
|
@ -19,7 +19,7 @@ class SysFSRootDirectory final : public SysFSDirectory {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static NonnullRefPtr<SysFSRootDirectory> create();
|
static NonnullRefPtr<SysFSRootDirectory> create();
|
||||||
virtual ErrorOr<void> traverse_as_directory(unsigned, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
virtual ErrorOr<void> traverse_as_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SysFSRootDirectory();
|
SysFSRootDirectory();
|
||||||
|
@ -53,7 +53,7 @@ private:
|
||||||
class SysFSBlockDevicesDirectory final : public SysFSDirectory {
|
class SysFSBlockDevicesDirectory final : public SysFSDirectory {
|
||||||
public:
|
public:
|
||||||
static NonnullRefPtr<SysFSBlockDevicesDirectory> must_create(SysFSDevicesDirectory const&);
|
static NonnullRefPtr<SysFSBlockDevicesDirectory> must_create(SysFSDevicesDirectory const&);
|
||||||
virtual ErrorOr<void> traverse_as_directory(unsigned, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
virtual ErrorOr<void> traverse_as_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
||||||
virtual RefPtr<SysFSComponent> lookup(StringView name) override;
|
virtual RefPtr<SysFSComponent> lookup(StringView name) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -63,7 +63,7 @@ private:
|
||||||
class SysFSCharacterDevicesDirectory final : public SysFSDirectory {
|
class SysFSCharacterDevicesDirectory final : public SysFSDirectory {
|
||||||
public:
|
public:
|
||||||
static NonnullRefPtr<SysFSCharacterDevicesDirectory> must_create(SysFSDevicesDirectory const&);
|
static NonnullRefPtr<SysFSCharacterDevicesDirectory> must_create(SysFSDevicesDirectory const&);
|
||||||
virtual ErrorOr<void> traverse_as_directory(unsigned, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
virtual ErrorOr<void> traverse_as_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
||||||
virtual RefPtr<SysFSComponent> lookup(StringView name) override;
|
virtual RefPtr<SysFSComponent> lookup(StringView name) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -31,7 +31,7 @@ mode_t SysFSComponent::permissions() const
|
||||||
return S_IRUSR | S_IRGRP | S_IROTH;
|
return S_IRUSR | S_IRGRP | S_IROTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> SysFSDirectory::traverse_as_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
ErrorOr<void> SysFSDirectory::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
||||||
{
|
{
|
||||||
MutexLocker locker(SysFSComponentRegistry::the().get_lock());
|
MutexLocker locker(SysFSComponentRegistry::the().get_lock());
|
||||||
VERIFY(m_parent_directory);
|
VERIFY(m_parent_directory);
|
||||||
|
|
|
@ -27,7 +27,7 @@ class SysFSComponent : public RefCounted<SysFSComponent> {
|
||||||
public:
|
public:
|
||||||
virtual StringView name() const { return m_name->view(); }
|
virtual StringView name() const { return m_name->view(); }
|
||||||
virtual ErrorOr<size_t> read_bytes(off_t, size_t, UserOrKernelBuffer&, OpenFileDescription*) const { return Error::from_errno(ENOTIMPL); }
|
virtual ErrorOr<size_t> read_bytes(off_t, size_t, UserOrKernelBuffer&, OpenFileDescription*) const { return Error::from_errno(ENOTIMPL); }
|
||||||
virtual ErrorOr<void> traverse_as_directory(unsigned, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const { VERIFY_NOT_REACHED(); }
|
virtual ErrorOr<void> traverse_as_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const { VERIFY_NOT_REACHED(); }
|
||||||
virtual RefPtr<SysFSComponent> lookup(StringView) { VERIFY_NOT_REACHED(); };
|
virtual RefPtr<SysFSComponent> lookup(StringView) { VERIFY_NOT_REACHED(); };
|
||||||
virtual mode_t permissions() const;
|
virtual mode_t permissions() const;
|
||||||
virtual ErrorOr<void> truncate(u64) { return EPERM; }
|
virtual ErrorOr<void> truncate(u64) { return EPERM; }
|
||||||
|
@ -51,7 +51,7 @@ private:
|
||||||
|
|
||||||
class SysFSDirectory : public SysFSComponent {
|
class SysFSDirectory : public SysFSComponent {
|
||||||
public:
|
public:
|
||||||
virtual ErrorOr<void> traverse_as_directory(unsigned, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
virtual ErrorOr<void> traverse_as_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
||||||
virtual RefPtr<SysFSComponent> lookup(StringView name) override;
|
virtual RefPtr<SysFSComponent> lookup(StringView name) override;
|
||||||
|
|
||||||
virtual ErrorOr<NonnullRefPtr<SysFSInode>> to_inode(SysFS const& sysfs_instance) const override final;
|
virtual ErrorOr<NonnullRefPtr<SysFSInode>> to_inode(SysFS const& sysfs_instance) const override final;
|
||||||
|
|
|
@ -936,7 +936,7 @@ UNMAP_AFTER_INIT NonnullRefPtr<ProcFSRootDirectory> ProcFSRootDirectory::must_cr
|
||||||
return directory;
|
return directory;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> ProcFSRootDirectory::traverse_as_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
ErrorOr<void> ProcFSRootDirectory::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
||||||
{
|
{
|
||||||
MutexLocker locker(ProcFSComponentRegistry::the().get_lock());
|
MutexLocker locker(ProcFSComponentRegistry::the().get_lock());
|
||||||
TRY(callback({ ".", { fsid, component_index() }, 0 }));
|
TRY(callback({ ".", { fsid, component_index() }, 0 }));
|
||||||
|
|
|
@ -567,10 +567,10 @@ public:
|
||||||
ErrorOr<void> procfs_get_current_work_directory_link(KBufferBuilder& builder) const;
|
ErrorOr<void> procfs_get_current_work_directory_link(KBufferBuilder& builder) const;
|
||||||
mode_t binary_link_required_mode() const;
|
mode_t binary_link_required_mode() const;
|
||||||
ErrorOr<size_t> procfs_get_thread_stack(ThreadID thread_id, KBufferBuilder& builder) const;
|
ErrorOr<size_t> procfs_get_thread_stack(ThreadID thread_id, KBufferBuilder& builder) const;
|
||||||
ErrorOr<void> traverse_stacks_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const;
|
ErrorOr<void> traverse_stacks_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const;
|
||||||
ErrorOr<NonnullRefPtr<Inode>> lookup_stacks_directory(const ProcFS&, StringView name) const;
|
ErrorOr<NonnullRefPtr<Inode>> lookup_stacks_directory(const ProcFS&, StringView name) const;
|
||||||
ErrorOr<size_t> procfs_get_file_description_link(unsigned fd, KBufferBuilder& builder) const;
|
ErrorOr<size_t> procfs_get_file_description_link(unsigned fd, KBufferBuilder& builder) const;
|
||||||
ErrorOr<void> traverse_file_descriptions_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const;
|
ErrorOr<void> traverse_file_descriptions_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const;
|
||||||
ErrorOr<NonnullRefPtr<Inode>> lookup_file_descriptions_directory(const ProcFS&, StringView name) const;
|
ErrorOr<NonnullRefPtr<Inode>> lookup_file_descriptions_directory(const ProcFS&, StringView name) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -723,7 +723,7 @@ public:
|
||||||
|
|
||||||
virtual InodeIndex component_index() const override;
|
virtual InodeIndex component_index() const override;
|
||||||
virtual ErrorOr<NonnullRefPtr<Inode>> to_inode(const ProcFS& procfs_instance) const override;
|
virtual ErrorOr<NonnullRefPtr<Inode>> to_inode(const ProcFS& procfs_instance) const override;
|
||||||
virtual ErrorOr<void> traverse_as_directory(unsigned, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
virtual ErrorOr<void> traverse_as_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
||||||
virtual mode_t required_mode() const override { return 0555; }
|
virtual mode_t required_mode() const override { return 0555; }
|
||||||
|
|
||||||
virtual UserID owner_user() const override;
|
virtual UserID owner_user() const override;
|
||||||
|
|
|
@ -232,7 +232,7 @@ ErrorOr<NonnullRefPtr<ProcFSExposedComponent>> ProcFSExposedDirectory::lookup(St
|
||||||
return ENOENT;
|
return ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> ProcFSExposedDirectory::traverse_as_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
ErrorOr<void> ProcFSExposedDirectory::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
||||||
{
|
{
|
||||||
MutexLocker locker(ProcFSComponentRegistry::the().get_lock());
|
MutexLocker locker(ProcFSComponentRegistry::the().get_lock());
|
||||||
auto parent_directory = m_parent_directory.strong_ref();
|
auto parent_directory = m_parent_directory.strong_ref();
|
||||||
|
|
|
@ -67,7 +67,7 @@ class ProcFSExposedComponent : public RefCounted<ProcFSExposedComponent> {
|
||||||
public:
|
public:
|
||||||
StringView name() const { return m_name->view(); }
|
StringView name() const { return m_name->view(); }
|
||||||
virtual ErrorOr<size_t> read_bytes(off_t, size_t, UserOrKernelBuffer&, OpenFileDescription*) const { VERIFY_NOT_REACHED(); }
|
virtual ErrorOr<size_t> read_bytes(off_t, size_t, UserOrKernelBuffer&, OpenFileDescription*) const { VERIFY_NOT_REACHED(); }
|
||||||
virtual ErrorOr<void> traverse_as_directory(unsigned, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const { VERIFY_NOT_REACHED(); }
|
virtual ErrorOr<void> traverse_as_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const { VERIFY_NOT_REACHED(); }
|
||||||
virtual ErrorOr<NonnullRefPtr<ProcFSExposedComponent>> lookup(StringView) { VERIFY_NOT_REACHED(); };
|
virtual ErrorOr<NonnullRefPtr<ProcFSExposedComponent>> lookup(StringView) { VERIFY_NOT_REACHED(); };
|
||||||
virtual ErrorOr<size_t> write_bytes(off_t, size_t, const UserOrKernelBuffer&, OpenFileDescription*) { return EROFS; }
|
virtual ErrorOr<size_t> write_bytes(off_t, size_t, const UserOrKernelBuffer&, OpenFileDescription*) { return EROFS; }
|
||||||
virtual ErrorOr<void> truncate(u64) { return EPERM; }
|
virtual ErrorOr<void> truncate(u64) { return EPERM; }
|
||||||
|
@ -105,7 +105,7 @@ class ProcFSExposedDirectory
|
||||||
friend class ProcFSComponentRegistry;
|
friend class ProcFSComponentRegistry;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ErrorOr<void> traverse_as_directory(unsigned, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
virtual ErrorOr<void> traverse_as_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
||||||
virtual ErrorOr<NonnullRefPtr<ProcFSExposedComponent>> lookup(StringView name) override;
|
virtual ErrorOr<NonnullRefPtr<ProcFSExposedComponent>> lookup(StringView name) override;
|
||||||
void add_component(const ProcFSExposedComponent&);
|
void add_component(const ProcFSExposedComponent&);
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ public:
|
||||||
virtual ~ProcFSRootDirectory();
|
virtual ~ProcFSRootDirectory();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual ErrorOr<void> traverse_as_directory(unsigned, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
virtual ErrorOr<void> traverse_as_directory(FileSystemID, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
||||||
ProcFSRootDirectory();
|
ProcFSRootDirectory();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ ErrorOr<NonnullRefPtr<Inode>> Process::ProcessProcFSTraits::to_inode(const ProcF
|
||||||
return TRY(ProcFSProcessDirectoryInode::try_create(procfs_instance, process->pid()));
|
return TRY(ProcFSProcessDirectoryInode::try_create(procfs_instance, process->pid()));
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> Process::ProcessProcFSTraits::traverse_as_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
ErrorOr<void> Process::ProcessProcFSTraits::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
||||||
{
|
{
|
||||||
auto process = m_process.strong_ref();
|
auto process = m_process.strong_ref();
|
||||||
if (!process)
|
if (!process)
|
||||||
|
|
|
@ -41,7 +41,7 @@ ErrorOr<size_t> Process::procfs_get_thread_stack(ThreadID thread_id, KBufferBuil
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> Process::traverse_stacks_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
ErrorOr<void> Process::traverse_stacks_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
||||||
{
|
{
|
||||||
TRY(callback({ ".", { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property(pid(), SegmentedProcFSIndex::ProcessSubDirectory::Stacks, SegmentedProcFSIndex::MainProcessProperty::Reserved) }, 0 }));
|
TRY(callback({ ".", { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property(pid(), SegmentedProcFSIndex::ProcessSubDirectory::Stacks, SegmentedProcFSIndex::MainProcessProperty::Reserved) }, 0 }));
|
||||||
TRY(callback({ "..", { fsid, m_procfs_traits->component_index() }, 0 }));
|
TRY(callback({ "..", { fsid, m_procfs_traits->component_index() }, 0 }));
|
||||||
|
@ -89,7 +89,7 @@ ErrorOr<size_t> Process::procfs_get_file_description_link(unsigned fd, KBufferBu
|
||||||
return data->length();
|
return data->length();
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> Process::traverse_file_descriptions_directory(unsigned fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
ErrorOr<void> Process::traverse_file_descriptions_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
||||||
{
|
{
|
||||||
TRY(callback({ ".", { fsid, m_procfs_traits->component_index() }, 0 }));
|
TRY(callback({ ".", { fsid, m_procfs_traits->component_index() }, 0 }));
|
||||||
TRY(callback({ "..", { fsid, m_procfs_traits->component_index() }, 0 }));
|
TRY(callback({ "..", { fsid, m_procfs_traits->component_index() }, 0 }));
|
||||||
|
@ -205,7 +205,7 @@ ErrorOr<void> Process::procfs_get_fds_stats(KBufferBuilder& builder) const
|
||||||
Inode* inode = description->inode();
|
Inode* inode = description->inode();
|
||||||
if (inode != nullptr) {
|
if (inode != nullptr) {
|
||||||
auto inode_object = description_object.add_object("inode");
|
auto inode_object = description_object.add_object("inode");
|
||||||
inode_object.add("fsid", inode->fsid());
|
inode_object.add("fsid", inode->fsid().value());
|
||||||
inode_object.add("index", inode->index().value());
|
inode_object.add("index", inode->index().value());
|
||||||
inode_object.finish();
|
inode_object.finish();
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ ErrorOr<FlatPtr> Process::do_statvfs(FileSystem const& fs, Custody const* custod
|
||||||
kernelbuf.f_ffree = fs.free_inode_count();
|
kernelbuf.f_ffree = fs.free_inode_count();
|
||||||
kernelbuf.f_favail = fs.free_inode_count(); // FIXME: same as f_bavail
|
kernelbuf.f_favail = fs.free_inode_count(); // FIXME: same as f_bavail
|
||||||
|
|
||||||
kernelbuf.f_fsid = fs.fsid();
|
kernelbuf.f_fsid = fs.fsid().value();
|
||||||
|
|
||||||
kernelbuf.f_namemax = 255;
|
kernelbuf.f_namemax = 255;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue