Andreas Kling
6873e7d016
Ext2FS: Move directory writing logic into Ext2FSInode.
2019-06-09 12:46:23 +02:00
Andreas Kling
8258b699db
Kernel: Use StringView more in Inode and subclasses.
2019-06-09 10:25:19 +02:00
Andreas Kling
736092a087
Kernel: Move i386.{cpp,h} => Arch/i386/CPU.{cpp,h}
...
There's a ton of work that would need to be done before we could spin up on
another architecture, but let's at least try to separate things out a bit.
2019-06-07 20:02:01 +02:00
Andreas Kling
891d4c4834
Kernel: Qualify a bunch of #include statements.
2019-06-07 19:29:34 +02:00
Andreas Kling
39d1a9ae66
Meta: Tweak .clang-format to not wrap braces after enums.
2019-06-07 17:13:23 +02:00
Andreas Kling
e42c3b4fd7
Kernel: Rename LinearAddress => VirtualAddress.
2019-06-07 12:56:50 +02:00
Andreas Kling
bc951ca565
Kernel: Run clang-format on everything.
2019-06-07 11:43:58 +02:00
Andreas Kling
08cd75ac4b
Kernel: Rename FileDescriptor to FileDescription.
...
After reading a bunch of POSIX specs, I've learned that a file descriptor
is the number that refers to a file description, not the description itself.
So this patch renames FileDescriptor to FileDescription, and Process now has
FileDescription* file_description(int fd).
2019-06-07 09:36:51 +02:00
Andreas Kling
e4cfa9a686
FIFO: Raise SIGPIPE in processes that write() to a broken pipe.
2019-06-06 11:00:48 +02:00
Andreas Kling
1f17b40d00
FIFO: Let write() fail with EPIPE if there's no reader.
2019-06-06 11:00:48 +02:00
Andreas Kling
a53c922f8a
FileSystem: Rename VFS::fchmod() -> chmod().
2019-06-02 12:52:21 +02:00
Andreas Kling
e67bfdb7f6
FileSystem: Route chown() and fchown() through VFS for access control.
2019-06-02 12:52:21 +02:00
Andreas Kling
aa35c08633
FileSystem: Only retrieve inode metadata once in VFS::chown().
2019-06-02 12:52:21 +02:00
Andreas Kling
5e1c7cb32c
Kernel: Memory-mapped files now have the absolute path as their name.
...
It's generated when the mapping is first created, so it won't update if
the file moves. Maybe that's something we should support, too.
2019-06-02 10:14:28 +02:00
Andreas Kling
93d3d1ede1
Kernel: Add fchown() syscall.
2019-06-01 20:31:36 +02:00
Andreas Kling
2dd9ef6863
Kernel: Make File::absolute_path() const.
2019-06-01 18:56:56 +02:00
Andreas Kling
00de8b9fc4
FileSystem: Don't create a temporary FileDescriptor every time we stat().
...
Instead, move the stat buffer population into InodeMetadata so we can call
it directly from VFS::stat() once we have an Inode.
2019-06-01 18:46:39 +02:00
Andreas Kling
bba2c062fe
FileSystem: Make Inode::lookup() take a StringView.
...
This avoids a lot of String allocation during path resolution.
2019-06-01 18:01:28 +02:00
Andreas Kling
2e14e5891c
FileSystem: Remove now-unused Inode::parent() and Inode::reverse_lookup().
...
These were only used to implement the old path resolution algorithm.
2019-06-01 17:46:37 +02:00
Andreas Kling
9ac95d1867
FileSystem: Pass mode_t to Inode::add_child().
...
This way the Ext2FS code can update its directory entry "file type" fields
correctly based on the file mode. This fixes some e2fsck whining.
2019-05-31 17:41:33 +02:00
Andreas Kling
fdf3608c8a
Update Badge<T> instantiations to simply be {}.
2019-05-31 15:44:04 +02:00
Andreas Kling
fa6446fc0d
FileSystem: VFS should require Badge<Device> for device registration.
2019-05-31 15:36:49 +02:00
Andreas Kling
a1fdda3e20
FileSystem: Don't expose VFS::root_inode().
...
It seems like we don't need to expose this anymore, it's only used by VFS
internally to construct the root custody.
2019-05-31 15:32:19 +02:00
Andreas Kling
056a7fea08
FileSystem: Rename VFS::resolve_path_to_custody() => resolve_path().
2019-05-31 15:30:09 +02:00
Andreas Kling
8adadf8a46
FileSystem: Reuse existing custodies when possible, and keep them updated.
...
Walk the custody cache and try to reuse an existing one when possible.
The VFS is responsible for updating them when something happens that would
cause the described relationship to change.
This is definitely not perfect but it does work for the basic scenarios like
renaming and removing directory entries.
2019-05-31 15:22:52 +02:00
Andreas Kling
e6a8133b0c
FileSystem: Merge symlink following logic into path resolution.
...
When encountering a symlink, we abandon the custody chain we've been working
on and start over with a new one (by recursing into a new resolution call.)
Caching symlinks in the custody model would be incredibly difficult to get
right with all the extra invalidation it would require, so let's just not.
2019-05-31 06:42:49 +02:00
Andreas Kling
709d168807
FileSystem: Get rid of VFS::resolve_path().
...
The only remaining client was resolve_symbolic_link() which now deals in
custodies instead.
2019-05-30 22:30:29 +02:00
Andreas Kling
874bffc729
FileSystem: Get rid of VFS::absolute_path() and teach Mount about custodies.
2019-05-30 22:30:29 +02:00
Andreas Kling
8e83aac8a3
FileSystem: Get rid of VFS::resolve_path_to_inode() and old_resolve_path().
2019-05-30 22:30:29 +02:00
Andreas Kling
55821c91f8
Kernel: Rename Process::cwd_custody() to Process::current_directory().
...
...and executable_custody() to just executable().
2019-05-30 22:30:25 +02:00
Andreas Kling
393851418b
FileSystem: Port most of the code over to using custodies.
...
The current working directory is now stored as a custody. Likewise for a
process executable file. This unbreaks /proc/PID/fd which has not been
working since we made the filesystem bigger.
This still needs a bunch of work, for instance when renaming or removing
a file somewhere, we have to update the relevant custody links.
2019-05-30 18:58:59 +02:00
Andreas Kling
4cb87b1753
FileSystem: Add a Custody class that represents a parent/child guardianship.
...
A custody is kind of a directory entry abstraction that represents a single
entry in a parent directory that tells us the name of a child inode.
The idea here is for path resolution to produce a chain of custody objects.
2019-05-30 17:46:08 +02:00
Andreas Kling
baaede1bf9
Kernel: Make the Process allocate_region* API's understand "int prot".
...
Instead of having to inspect 'prot' at every call site, make the Process
API's take care of that so we can just pass it through.
2019-05-30 16:14:37 +02:00
Andreas Kling
8fe72d7b3c
Kernel: Make fcntl(F_SETFL) actually update the append/blocking flags.
2019-05-30 15:37:51 +02:00
Andreas Kling
08926e59b3
Kernel: Add InodeFile, a File subclass for regular files.
...
Finally everything that can be held by a FileDescriptor actually inherits
from the File class.
2019-05-30 13:39:17 +02:00
Andreas Kling
66c1a9be3b
Kernel: Pass 'prot' argument to File::mmap() and act on it.
...
Nothing crazy, this just means that PROT_READ allocates readable regions,
and that PROT_WRITE allocates writable ones.
2019-05-30 12:38:35 +02:00
Robin Burchell
0dc9af5f7e
Add clang-format file
...
Also run it across the whole tree to get everything using the One True Style.
We don't yet run this in an automated fashion as it's a little slow, but
there is a snippet to do so in makeall.sh.
2019-05-28 17:31:20 +02:00
Robin Burchell
c6e79bd53a
Kernel: Support O_APPEND
...
As per the manpage, this acts as a transparent lseek() before write.
2019-05-26 01:32:05 +02:00
Andreas Kling
75b0e5cce5
Ext2FS: Block #0 can terminate an inode block list early.
...
We were already handling this for the indirect blocks, but the direct ones
would happily consider #0 to be a valid block list entry.
2019-05-25 19:19:43 +02:00
Andreas Kling
728327df8a
Ext2FS: Fix build with EXT2_DEBUG enabled, and tweak some variable names.
2019-05-25 17:23:17 +02:00
Andreas Kling
75866438b5
Kernel: Don't page in entire file immediately on mmap().
...
If we just don't do anything, the page fault handler will load the file
incrementally as-needed instead. :^)
2019-05-18 22:30:55 +02:00
Andreas Kling
959c8f287c
FileDescriptor: It's actually okay to seek past the end of a file. :^)
2019-05-18 21:54:31 +02:00
Andreas Kling
a4e48dce77
Kernel: SharedMemory should implement mmap().
2019-05-18 04:17:53 +02:00
Andreas Kling
237628a7a6
Kernel: Tidy up FileDescriptor members a bit.
2019-05-18 04:14:22 +02:00
Andreas Kling
6957825444
Kernel: Factor out range allocation from Process::allocate_region*().
...
These functions were doing exactly the same thing for range allocation, so
share that code in an allocate_range() helper.
Region allocation will now also fail if range allocation fails, which means
that mmap() can actually fail without falling apart. Exciting times!
2019-05-17 04:39:22 +02:00
Robin Burchell
f1f3cd58b0
FileSystem: fix errno on lseek() beyond the bounds of a file
...
These are all EINVAL. Also remove bogus assert on metadata.size.
2019-05-16 16:05:08 +02:00
Andreas Kling
176f683f66
Kernel: Move Inode to its own files.
2019-05-16 03:02:37 +02:00
Andreas Kling
01ffcdfa31
Kernel: Encapsulate the Region's COW map a bit better.
2019-05-14 17:31:57 +02:00
Andreas Kling
8b249bd09b
Kernel+Userland: Implement mknod() syscall and add a /bin/mknod program.
2019-05-03 22:59:58 +02:00
Andreas Kling
2470fdcd9b
Kernel: Make Socket inherit from File.
2019-05-03 20:42:43 +02:00