Tim Schumacher
3b3af58cf6
Kernel: Annotate all KBuffer
and DoubleBuffer
with a custom name
2022-07-12 00:55:31 +01:00
Liav A
58acdce41f
Kernel/FileSystem: Simplify even more the mount syscall
...
As with the previous commit, we put a distinction between filesystems
that require a file description and those which don't, but now in a much
more readable mechanism - all initialization properties as well as the
create static method are grouped to create the FileSystemInitializer
structure. Then when we need to initialize an instance, we iterate over
a table of these structures, checking for matching structure and then
validating the given arguments from userspace against the requirements
to ensure we can create a valid instance of the requested filesystem.
2022-05-29 19:31:02 +01:00
Ariel Don
9a6bd85924
Kernel+LibC+VFS: Implement utimensat(3)
...
Create POSIX utimensat() library call and corresponding system call to
update file access and modification times.
2022-05-21 18:15:00 +02:00
Idan Horowitz
086969277e
Everywhere: Run clang-format
2022-04-01 21:24:45 +01:00
Lenny Maiorani
190cf1507b
Kernel: Use default constructors/destructors
...
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#cother-other-default-operation-rules
"The compiler is more likely to get the default semantics right and
you cannot implement these functions better than the compiler."
2022-03-17 00:51:36 -07:00
Idan Horowitz
2e5a9b4fab
Kernel: Use HashCompatible HashMap lookups instead of specifying a hash
2022-01-29 23:01:23 +02:00
Sam Atkins
45cf40653a
Everywhere: Convert ByteBuffer factory methods from Optional -> ErrorOr
...
Apologies for the enormous commit, but I don't see a way to split this
up nicely. In the vast majority of cases it's a simple change. A few
extra places can use TRY instead of manual error checking though. :^)
2022-01-24 22:36:09 +01:00
David Briggs
cf45370c47
Kernel: Use ErrorOr in BlockBased and Ext2 filesystem raw read and write
...
These functions used to return booleans which withheld useful
error information for callers. Internally they would suppress
and convert Error objects. We now log or propagate these errors
up the stack.
2022-01-23 14:36:01 +00:00
Idan Horowitz
77a81f5eed
Kernel: Use KString instead of String in Ext2FSInode's lookup cache
2022-01-21 16:27:21 +01:00
Idan Horowitz
215e031bf5
Kenrel: Use a KString for Ext2FSDirectoryEntry::name
...
This brings Ext2FileSystem one step closer to being OOM-safe.
2022-01-13 00:20:08 -08:00
Idan Horowitz
709fe64c1b
Revert "Kernel: Use a StringView for Ext2FSDirectoryEntry::name"
...
This reverts commit d1d24eaef4
.
I missed the fact that traverse_as_directory uses a temporary buffer,
meaning that entries created based on its callback will point to free'd
memory.
2022-01-12 21:26:03 +02:00
Idan Horowitz
d1d24eaef4
Kernel: Use a StringView for Ext2FSDirectoryEntry::name
...
This is a temporary struct, so there's no need to allocate a long term
storage for these strings.
2022-01-12 16:09:09 +02:00
Andreas Kling
a4b3bf1d63
Kernel: Remove empty Ext2FSInode::one_ref_left()
2022-01-11 01:12:16 +01:00
Andreas Kling
bcc0186bbc
Kernel/Ext2FS: Use HashMap::remove_all_matching() in Ext2FS
...
This makes the inode cache eviction mechanism quite a bit easier
to understand, thanks to the new expressive API. :^)
2022-01-05 18:57:14 +01:00
Brian Gianforcaro
4b4cf06069
Kernel: Remove temporary Vector from Ext2FS::flush_writes()
...
Previously we were using this vector to store the inodes as we iterated.
However, we don't need to store all of them, just the previous inode, as
we know it will be safe to remove it once we've iterated past that
element.
2022-01-05 14:04:18 +01:00
Brian Gianforcaro
6c66311ade
Kernel: Use MUST + Vector::try_empend instead of Vector::empend
...
In preparation for making Vector::empend unavailable during
compilation of the Kernel.
2022-01-05 14:04:18 +01:00
Brian Gianforcaro
24066ba5ef
Kernel: Use MUST + Vector::try_append instead of Vector::append
...
In preparation for making Vector::append unavailable during
compilation of the Kernel.
2022-01-05 14:04:18 +01:00
Owen Smith
f1eb975a7a
Kernel: Replace divide_rounded_up uses with ceil_div in Ext2FileSystem
...
This function was duplicated with ceil_div in AK.
2022-01-04 14:18:15 +02:00
sin-ack
69ef211925
Kernel+LibC: Move errno definitions to Kernel/API/POSIX
...
This fixes at least half of our LibC includes in the kernel. The source
of truth for errno codes and their description strings now lives in
Kernel/API/POSIX/errno.h as an enumeration, which LibC includes.
2021-12-16 22:21:35 +03:30
Hendiadyoin1
4cec16a713
Kernel: Add implied auto-specifiers in FileSystem
...
As per clang-tidy.
2021-12-15 23:34:11 -08:00
Andreas Kling
8b1108e485
Everywhere: Pass AK::StringView by value
2021-11-11 01:27:46 +01:00
Andreas Kling
ad5d217e76
Kernel/Ext2FS: Propagate HashMap errors instead of panicking
2021-11-11 01:27:46 +01:00
Andreas Kling
f86ee71f65
Kernel/Ext2FS: Propagate errors from block list computation functions
2021-11-10 21:58:58 +01:00
Andreas Kling
4661ca5f15
Kernel: Propagate Vector append errors in two places in Ext2FS
...
There are a bunch more of these, just taking care of some simple ones.
2021-11-10 21:58:58 +01:00
Andreas Kling
5ce753b74d
Kernel: Make Inode::traverse_as_directory() callback return ErrorOr
...
This allows us to propagate errors from inside the callback with TRY().
2021-11-10 21:58:58 +01:00
Andreas Kling
88b6428c25
AK: Make Vector::try_* functions return ErrorOr<void>
...
Instead of signalling allocation failure with a bool return value
(false), we now use ErrorOr<void> and return ENOMEM as appropriate.
This allows us to use TRY() and MUST() with Vector. :^)
2021-11-10 21:58:58 +01:00
Andreas Kling
79fa9765ca
Kernel: Replace KResult and KResultOr<T> with Error and ErrorOr<T>
...
We now use AK::Error and AK::ErrorOr<T> in both kernel and userspace!
This was a slightly tedious refactoring that took a long time, so it's
not unlikely that some bugs crept in.
Nevertheless, it does pass basic functionality testing, and it's just
real nice to finally see the same pattern in all contexts. :^)
2021-11-08 01:10:53 +01:00
Andreas Kling
fe98cb2c4b
Kernel: Make Ext2FS::free_inode() return KResult, and use TRY() more
...
While there's no clear propagation path for errors that happen in an
inode destructor, using TRY() still makes the code a lot nicer.
2021-10-21 23:23:23 +02:00
Andreas Kling
98b865fe10
Kernel: Make Ext2FS::write_ext2_inode() return KResult
...
This allows us to use TRY() in more places.
2021-10-21 23:23:23 +02:00
Andreas Kling
6f69d5204f
Kernel: Make Inode::flush_metadata() return a KResult
...
Even if this goes nowhere yet, we have to start building an error
propagation path somewhere.
2021-10-21 23:23:23 +02:00
Andreas Kling
899cee8185
Kernel: Make KBuffer::try_create_with_size() return KResultOr
...
This allows us to use TRY() in a lot of new places.
2021-09-07 15:15:08 +02:00
Andreas Kling
4a9c18afb9
Kernel: Rename FileDescription => OpenFileDescription
...
Dr. POSIX really calls these "open file description", not just
"file description", so let's call them exactly that. :^)
2021-09-07 13:53:14 +02:00
Andreas Kling
b481132418
Kernel: Make UserOrKernelBuffer return KResult from read/write/memset
...
This allows us to simplify a whole bunch of call sites with TRY(). :^)
2021-09-07 13:53:14 +02:00
Andreas Kling
b083b165a7
Kernel/Ext2FS: Wrap calls to traverse_as_directory() in TRY()
...
Nothing says we can't TRY() a multi-line function call. :^)
2021-09-06 13:06:05 +02:00
Andreas Kling
36725228fa
Kernel: Tidy up Ext2FS construction a bit
2021-09-06 13:06:05 +02:00
Ali Mohammad Pur
97e97bccab
Everywhere: Make ByteBuffer::{create_*,copy}() OOM-safe
2021-09-06 01:53:26 +02:00
Andreas Kling
caaeae9607
Kernel: Make FileSystem::get_inode() return KResultOr<NRP<Inode>>
...
This allows for natural error propagation in a bunch of new places.
2021-09-05 18:55:55 +02:00
Andreas Kling
865eb54f75
Kernel/Ext2FS: Use TRY() in the Ext2FS
...
This class was just *full* of great opportunities for TRY(). :^)
2021-09-05 15:30:15 +02:00
Andreas Kling
9d736772bd
Kernel/Ext2FS: Remove a String allocation in debug logging
...
We were creating a temporary String just to log the target when writing
a symlink directly into inline storage.
2021-09-05 01:10:55 +02:00
Andreas Kling
4cbe348a0f
Kernel/Ext2FS: Avoid temporary String allocation during inode creation
...
Make sure we pass the StringView we get all the way through so it never
turns into a heap-allocated String. :^)
2021-08-29 01:09:19 +02:00
Andreas Kling
ae197deb6b
Kernel: Strongly typed user & group ID's
...
Prior to this change, both uid_t and gid_t were typedef'ed to `u32`.
This made it easy to use them interchangeably. Let's not allow that.
This patch adds UserID and GroupID using the AK::DistinctNumeric
mechanism we've already been employing for pid_t/ProcessID.
2021-08-29 01:09:19 +02:00
Andreas Kling
7676edfb9b
Kernel: Stop allowing implicit conversion from KResult to int
...
This patch removes KResult::operator int() and deals with the fallout.
This forces a lot of code to be more explicit in its handling of errors,
greatly improving readability.
2021-08-14 15:19:00 +02:00
Andreas Kling
d30d776ca4
Kernel: Make FileSystem::initialize() return KResult
...
This forced me to also come up with error codes for a bunch of
situations where we'd previously just panic the kernel.
2021-08-14 15:19:00 +02:00
Andreas Kling
ef2720bcad
Kernel: Make Inode::lookup() return a KResultOr<NonnullRefPtr<Inode>>
...
This allows file systems to return arbitrary error codes instead of just
an Inode or not an Inode.
2021-08-14 13:34:59 +02:00
Andreas Kling
2cd8b21974
Kernel: Add convenience values to the Memory::Region::Access enum
...
Instead of `Memory::Region::Access::Read | Memory::Region::AccessWrite`
you can now say `Memory::Region::Access::ReadWrite`.
2021-08-06 22:25:00 +02:00
Andreas Kling
93d98d4976
Kernel: Move Kernel/Memory/ code into Kernel::Memory namespace
2021-08-06 14:05:58 +02:00
Brian Gianforcaro
a6db2f985a
Kernel: Handle OOM in DiskCache when mounting Ext2 filesystems
...
Create the disk cache up front, so we can verify it succeeds.
Make the KBuffer allocation fail-able, so we can properly handle
failure when the user asks up to mount a Ext2 filesystem under
OOM conditions.
2021-08-03 18:54:23 +02:00
Brian Gianforcaro
15cd5d324c
Kernel: Handle OOM from KBuffer usage in Ext2FS::get_bitmap_block()
...
Fixes up error handling on an OOM-able path, and removes one more usage
of KBuffer::create_with_size.
2021-08-03 18:54:23 +02:00
Andreas Kling
bd37840cf5
Kernel/Ext2FS: Surface Vector allocation failures in block allocation
2021-07-18 02:15:56 +02:00
Andreas Kling
1f18558ee2
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&.
2021-07-18 01:53:04 +02:00