Andreas Kling
0d36281162
Refactor FS::find_parent_of_inode() into Inode::parent().
...
This way, Ext2FSInode can cache its parent inode index. This makes absolute
path lookups dramatically faster.
SynthFSInode is also simplified greatly.
2019-01-04 18:37:58 +01:00
Andreas Kling
eb78238032
Ext2FS: Don't worry about updating lookup caches in write_ext2_inode().
...
Instead, have Ext2FSInode worry about that when flushing.
Also tidy up in the inode bitmap accessors at the same time for some reason.
2019-01-01 03:55:43 +01:00
Andreas Kling
8f9542174f
Ext2FS: Don't cache a full Ext2FSInode object for non-existent inodes.
...
This was a bit silly. We were always creating Ext2FSInode objects when
Ext2FSInode::get_inode() was called. They'd then sit and fatten up the
inode cache forever, despite not representing allocated inodes.
This patch consults the inode bitmap and if get_inode() is called with
an unallocated inode index, we simply cache a nullptr to represent the
fact that this index is unused.
This could be a lot better optimized, it will currently hit the disk for
every new inode index encountered.
2019-01-01 03:37:27 +01:00
Andreas Kling
d07b08a287
FS: Don't default to having a full InodeMetadata in every Inode.
...
This allows Ext2FS to keep its own ext2_inode around instead.
2019-01-01 03:16:36 +01:00
Andreas Kling
0cb074dc73
Ext2FS: On second thought, let's not uncache the Ext2FSInodes today..
2019-01-01 02:52:21 +01:00
Andreas Kling
741349502f
Ext2FS: Free Ext2FSInodes when the last user releases them.
...
The inode cache was keeping these alive forever. Added a cute little magic
trick to Retainable that calls T::one_retain_left() when the retain count
is decremented to 1.
2019-01-01 02:38:09 +01:00
Andreas Kling
42d9f18cae
Remove the cheesy block cache from DiskBackedFS.
...
This should be reimplemented with proper paging support. This approach was
mostly just chewing kmalloc memory.
2019-01-01 02:27:05 +01:00
Andreas Kling
cc30407b8c
Oops, errno codes need to be negative in the kernel.
2018-12-31 20:38:25 +01:00
Andreas Kling
eed6031064
Fix EXT2_DEBUG build.
2018-12-29 03:36:22 +01:00
Andreas Kling
ab72666f48
Plug leaks in SynthFS::remove_file().
...
The process spawn stress test can now run forever. :^)
2018-12-28 03:09:45 +01:00
Andreas Kling
079889050e
Merge lookup_ext2_inode() into Ext2FS::get_inode().
2018-12-25 00:32:57 +01:00
Andreas Kling
6451b98ad4
Refactor FS::add_inode_to_directory() into Inode::add_child().
2018-12-25 00:27:39 +01:00
Andreas Kling
4f142b86ec
Refactor FS::write_inode() into Inode::write().
2018-12-25 00:10:32 +01:00
Andreas Kling
b0db0e5de0
Get rid of Ext2FS::modify_link_count() in favor of Inode accessors.
2018-12-24 23:58:00 +01:00
Andreas Kling
673870563d
Convert some FS methods to return RetainPtr<Inode>.
2018-12-24 23:45:09 +01:00
Andreas Kling
1e07ead119
Get rid of Ext2FS::is_directory_inode().
...
This was only used for assertions and will be factored out in favor of
Inode metadata checks eventually.
2018-12-24 23:38:15 +01:00
Andreas Kling
12a6963a5d
Fix bug where Vnode kept its Inode alive indefinitely.
2018-12-24 23:24:49 +01:00
Andreas Kling
7bc41532be
Remove FS::read_entire_inode() in favor of Inode::read_entire().
2018-12-21 17:45:42 +01:00
Andreas Kling
04ee693925
Get rid of FS::inode_metadata() since we use Inode::metadata() everywhere.
2018-12-21 17:32:18 +01:00
Andreas Kling
8a71303827
Get rid of FS::read_inode_bytes() and use Inode::read_bytes() everywhere.
2018-12-21 17:28:16 +01:00
Andreas Kling
951ed6692b
Remove InodeIdentifier::metadata().
2018-12-21 17:16:53 +01:00
Andreas Kling
ec1c487dcd
Yet another pass of style fixes.
2018-12-21 02:10:45 +01:00
Andreas Kling
ed7ae6c02c
Add sync() syscall and a /bin/sync.
...
It walks all the live Inode objects and flushes pending metadata changes
wherever needed.
This could be optimized by keeping a separate list of dirty Inodes,
but let's not get ahead of ourselves.
2018-12-20 00:39:29 +01:00
Andreas Kling
d0f06e5f3f
Automatically call Inode::flush_metadata() before an Inode is destroyed.
...
Use a little template magic to have Retainable::release() call out to
T::will_be_destroyed() if such a function exists before actually calling
the destructor. This gives us full access to virtual functions in the
pre-destruction code.
2018-12-19 22:28:09 +01:00
Andreas Kling
1f44cd9dd9
Reworked Inode to have a dirty bit and subclass-implemented flush_metadata().
...
This way we can defer disk writes as long as we like. There's no automatic
flushing happening just yet.
2018-12-19 21:56:45 +01:00
Andreas Kling
d506c857ab
Rename CoreInode to Inode.
...
I don't know what I was thinking here. Clearly Inode is the right name.
2018-12-19 21:18:28 +01:00
Andreas Kling
038d8641f9
Implement utime() along with a naive /bin/touch.
...
This synchronous approach to inodes is silly, obviously. I need to rework
it so that the in-memory CoreInode object is the canonical inode, and then
we just need a sync() that flushes pending changes to disk.
2018-12-19 21:14:55 +01:00
Andreas Kling
ca6847b5bb
Import a simple text editor I started working on.
2018-12-04 00:27:16 +01:00
Andreas Kling
aff89d2fd7
Yet more coding style fixes.
2018-12-03 01:38:22 +01:00
Andreas Kling
e7cc08226f
Implement basic support for times().
...
The kernel now bills processes for time spent in kernelspace and userspace
separately. The accounting is forwarded to the parent process in reap().
This makes the "time" builtin in bash work.
2018-12-03 01:14:19 +01:00
Andreas Kling
f6e27c2abe
More coding style changes.
2018-12-03 00:39:25 +01:00
Andreas Kling
d824442e3e
Get rid of deprecated_enumerateDirectoryInode.
...
This was a vestige from the pre-CoreInode implementation of Ext2FS.
2018-12-03 00:26:39 +01:00
Andreas Kling
407bb3e76e
Some coding style fixes. I'm getting more comfortable with this style.
2018-12-03 00:20:00 +01:00
Andreas Kling
7d13432b55
Remove debug kprintfs() in VFS::mkdir.
2018-12-03 00:11:16 +01:00
Andreas Kling
85b886c2e0
Make it possible to build the Kernel on a macOS host.
...
It still requires an ELF compiler and linker, but at least it builds.
I need to get rid of the "Unix" namespace. This does a lot of that.
2018-12-02 23:34:50 +01:00
Andreas Kling
ac7a60225e
Add TIOCGWINSZ ioctl so userland can determine terminal geometry.
...
(Don't) use this to implement short-form output in ls.
I'm too tired to make a nice column formatting algorithm.
I just wanted something concise when I type "ls".
2018-11-29 03:45:23 +01:00
Andreas Kling
f5a0b6961c
Fix mkdir with relative paths.
2018-11-18 23:28:43 +01:00
Andreas Kling
de4604ac95
Finally hook up the mkdir code to a syscall.
...
Added a /bin/mkdir that makes directories. How very neat :^)
There are various limitations because of missing functionality.
2018-11-18 15:02:16 +01:00
Andreas Kling
9d05f6b7a7
Make bash-2.05b build with minimal changes.
...
This is really neat. :^)
2018-11-17 00:14:07 +01:00
Andreas Kling
a788e85c09
Refactor TTY signal generation a bit.
...
We now respect the VINTR and VQUIT control characters in the termios.
2018-11-16 20:18:58 +01:00
Andreas Kling
c99f8af66d
Add ioctl() and reimplement tcsetpgrp/tcsetpgrp as ioctls.
2018-11-16 13:13:50 +01:00
Andreas Kling
2529925fe9
Some more renaming:
...
FileSystem -> FS
SyntheticFileSystem -> SynthFS
ProcFileSystem -> ProcFS
Ext2FileSystem -> Ext2FS
Ext2Inode -> Ext2FSInode
2018-11-15 17:13:10 +01:00
Andreas Kling
eced5f11e3
Add CoreInode::reverse_lookup().
...
Getting the absolute path of an ext2fs inode now uses the lookup cache
which makes it a lot faster.
2018-11-15 17:04:55 +01:00
Andreas Kling
5f434bc00b
Add CoreInode::lookup() for directory lookups.
...
Also add a name-to-inode lookup cache to Ext2Inode. This seems like a great
speedup for filesystem traversal.
2018-11-15 16:38:43 +01:00
Andreas Kling
8fa2d7104a
More VFS cleanup.
2018-11-15 16:04:25 +01:00
Andreas Kling
396a32835b
A pass of style/naming cleanup in VFS.
2018-11-15 15:10:30 +01:00
Andreas Kling
457a5df7d5
Rename:
...
VirtualFileSystem -> VFS
VirtualFileSystem::Node -> Vnode
2018-11-15 14:43:10 +01:00
Andreas Kling
c735c56e4c
More work on CoreInode.
2018-11-13 23:44:54 +01:00
Andreas Kling
26852a8363
Add metadata to CoreInode.
2018-11-13 13:32:16 +01:00
Andreas Kling
10c470e95f
Make page_in_from_vnode 2x faster.
...
...by adding a new class called Ext2Inode that inherits CoreInode.
The idea is that a vnode will wrap a CoreInode rather than InodeIdentifier.
Each CoreInode subclass can keep whatever caches they like.
Right now, Ext2Inode caches the list of block indices since it can be very
expensive to retrieve.
2018-11-13 13:02:39 +01:00