#
34fcf3d9 |
|
21-Mar-2024 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Refactor file_descriptor seek-disabled behavior. * Default "pos" to "-1" instead of 0 and check for this value instead of ops->fd_seek directly in IO operations. * Set "pos" to "0" only for seekable vnodes. * Return ESPIPE in read() and write() if the specified pos is not -1, but the descriptor->pos is. Fixes the VFS part of #18836. Change-Id: Ib4da1652b06798588abedc98963aeb63511d3e41 Reviewed-on: https://review.haiku-os.org/c/haiku/+/7544 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
230110ff |
|
21-Mar-2024 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Remove "count" parameter from first vnode_path_to_vnode variant. All callers just set it to "0", and it's not clear that it's actually useful outside vnode_path_to_vnode's own usage of it, anyway. Makes the two function variants more distinct and harder to accidentally mix up.
|
#
36c1b695 |
|
21-Mar-2024 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Make vnode_path_to_vnode use VnodePutter internally. Eliminates the "goto"s. Should not have any functional change.
|
#
90edc22b |
|
21-Mar-2024 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Fix reference leaks in vnode_and_path_to_dir_vnode. Fixes #18805.
|
#
99e6fd94 |
|
16-Mar-2024 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Fix some potential edge cases around vnode creation. Noticed as part of investigating #18805. Change-Id: I158126979996f8527728d073ac2101f2f834bfb2
|
#
935c0c73 |
|
15-Mar-2024 |
Anarchos <sylvain_kerjean@hotmail.com> |
vfs: rename is a no-op when same path. The old behavior was introduced by the commit f40c5e32115c22bd1b76ee1abe607040c09681a9 (05 Nov 2009), while the new behavior is specified by POSIX: https://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html The new behavior permits to rename an empty folder to itself without error, which was encountered here: https://github.com/ocaml/ocaml/blob/trunk/testsuite/tests/lib-sys/rename.ml#L85 Fixes #18851. Change-Id: Ie4e2999b695b8bb3ee69b1e3ae487323d8315d5e Reviewed-on: https://review.haiku-os.org/c/haiku/+/7527 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
0e703d1f |
|
03-Mar-2024 |
PulkoMandy <pulkomandy@pulkomandy.tk> |
vfs: log in syslog which inode is preventing an unmount This may be somewhat helpful to investigate problems when unmounting fails. Change-Id: I72b70a34ca43697f22a13db6aff342abce38cd78 Reviewed-on: https://review.haiku-os.org/c/haiku/+/7501 Reviewed-by: nephele nephele <nep-git@packageloss.eu> Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: Rene Gollent <rene@gollent.com>
|
#
2fb174a7 |
|
09-Jan-2024 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Add missing initialization.
|
#
77cf55c4 |
|
09-Apr-2023 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel/vfs: create_vnode should also create non existing entries when traversing Fixes #18355. Change-Id: I96abb95c14a74bcf9fec802badeb16c978a3b3d1 Reviewed-on: https://review.haiku-os.org/c/haiku/+/6321 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
79c0b628 |
|
08-Jan-2024 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Make vnode_path_to_vnode and derived methods take VnodePutter&. Upcoming changes will make this method return values in _vnode even when they return error codes under some conditions. To avoid easily- caused memory leaks, this commit refactors the output variable to be VnodePutter&, and all consuming methods to thus make use of Putters. Should not be a functional change. Change-Id: Id7b9066f8cd50c159d52c921b16e475e4e1de806 Reviewed-on: https://review.haiku-os.org/c/haiku/+/7301 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
bb094580 |
|
08-Jan-2024 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Convert from custom VNodePutter to the generic VnodePutter. The latter is actually an AutoDeleter based on CObjectDeleter. No functional change intended.
|
#
76f69a9e |
|
08-Jan-2024 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: More usage of FileDescriptorDeleter. Remaining non-uses are mostly in specialized functions that e.g. operate on many file descriptors at once (like vfs_exec_io_context.) Reduces "goto"s. Should not have any functional change.
|
#
1bde6f6c |
|
08-Jan-2024 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Standardize AutoDeleters for file_descriptor on FileDescriptorPutter. No functional change intended.
|
#
3433ec73 |
|
06-Jan-2024 |
X512 <danger_mail@list.ru> |
vfs/preallocate: fix file descriptor leak Fixes #18724. Change-Id: I1a17a36106d13853888342a397ecd03087b1fdcf Reviewed-on: https://review.haiku-os.org/c/haiku/+/7299 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
f96456d8 |
|
19-Jun-2023 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Fix missing lock in fs_mount(). At least a read lock of the sVnodeLock must be held when calling lookup_vnode, but we held none at all. This rectifies that problem. This bug appears to have been around for many years, but no-one noticed since ASSERT_READ_LOCKED_RW_LOCK only works with more debug options turned on than the kernel is built with. I discovered this while working on a new version of those additional options.
|
#
ce08f03c |
|
01-Apr-2023 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel & add-ons: Adjustments to use DoublyLinkedList::InsertBefore. The Insert(before, element) function has been marked deprecated since 2010, but still had many usage and kept accumulating more. It's long past time we got rid of all them and actually deprecated the function itself. Insert(before, element) just calls InsertBefore, so no functional change.
|
#
81458ef8 |
|
13-Feb-2023 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Remove read sizing hack in common_file_io_vec_pages. All drivers using IORequest should have any problems here already caught by it, and overruns in other drivers would overrun the buffer and cause corruptions, so we should no longer silently be ignoring this, presuming it is still a problem at all. As the TODO comment indicated that this logic could also be used for writes if this wasn't a problem, I have added a separate TODO for that.
|
#
8654ab71 |
|
31-Jan-2023 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Use new/delete for advisory_lock structures. No functional change intended.
|
#
7cc1c1af |
|
07-Dec-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Validate that only one of O_RDWR or O_WRONLY is used, if any. Otherwise we will have open modes that could have both and lead to confusion in code that presumes only one will be set. This catches the cause of some ported software (e.g. Wayland layer) misbehaving with ramfs mounted in /var/shared_memory: the ramfs does not properly handle both flags set, and due to another bug, they are for shm_open'ed files. (cherry picked from commit 9bc250e28d3bb4293c39a283807b67b6e82dda1d) Change-Id: I9e98be89b6d4a2da90f74c048b4f762ca9cf8738 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5852 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
1284e971 |
|
29-Oct-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Fix locking behavior in acquire_vnode and add a missing ASSERT. vnode deletion is prevent either by owning a reference to the node, or by being at least a reader of the vnodes lock. Thus, in acquire_vnode, we have to inc_ref_count while still holding the lock in order to prevent a race. This function is used so rarely and quite deep inside FS drivers that I'm not sure this race would ever have been a problem. Nonetheless the old code was incorrect.
|
#
b4b1561b |
|
28-Oct-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Do not wait for removed vnodes to become unbusy. Most of the time, that is harmless and will just cause a slight delay before the vnode is removed and we return NULL instead of finding it. However, in rare circumstances involving renames, we can wind up in a deadlock with the thread that is trying to remove the vnode, and would have to wait all the way to the timeout (a full ten seconds!). The only vnodes not about to disappear from the table that can be both "removed" and "busy" seem to be special vnodes like pipes, which will be in an "unpublished" state while they are initially "busy" which we can check for, in case something wants to wait for them. The "dirconc" test readily triggered a pathological case of this behavior. Before this commit, it ran for over 15 minutes before I killed it (and it was not close to done at that point, either.) After this change, it completes successfully in around 3 minutes or so on my test VM. Thanks to mjg@freebsd.org for pointing out this testcase and its misbehavior on Haiku! Change-Id: Id1accf0aaf0724e1aec927a437d3a2ac1596cd98
|
#
8ba3797e |
|
18-Aug-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Check HAS_FS_CALL(..., open_dir) in open_dir_vnode. All filesystems have open_dir calls in their vnode hooks, but there are some vnode hooks that do not, like FIFOs. Thus we need to check the hook actually exists. Fixes #17870.
|
#
93dfc938 |
|
17-Aug-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Print the vnode or mount in question in FS_CALL panics. May help to diagnose #17870.
|
#
e49b671d |
|
23-Jun-2022 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel/vfs: lstat a symlinked dir with a trailing slash should traverse golang's TestSymlinkWithTrailingSlash exhibits the bug. Change-Id: I7e16bad9857e9be042fc215a587c861bc4eef716 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5395 Reviewed-by: waddlesplash <waddlesplash@gmail.com> Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
|
#
92030a4a |
|
22-Mar-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
Revert "vfs: functions to change a vnode busy status and ID" This reverts commit 8497a2cc289f6d991147995507e4efc0ae189147. The VFS layer is not at all ready for this. Many places in the code implicitly assume ino_t values will never change. This functionality is only necessary for live shrinking of partitions, which is a feature niche enough we do not need to worry about implementing it in the first round of resizing (if ever.)
|
#
4027df88 |
|
10-Mar-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Fix mismatched frees of vnodes. Regression from yesterday's commit. Fixes #17642. Hopefully this is all of them.
|
#
585ce471 |
|
09-Mar-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Create an object_cache for vnodes. In addition to being slightly more efficient, this also allows one to see precisely how many vnodes are currently "alive" across all mounts via the "slabs" KDL command.
|
#
856721d9 |
|
04-Mar-2022 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Use correct select pointer type in allocation of IO context. All pointers are the same size of course, so this is not a functional change.
|
#
711e2dc0 |
|
01-Dec-2021 |
Augustin Cavalier <waddlesplash@gmail.com> |
Adjust all struct dirent creations (again), this time to use offsetof(). The dirent struct is not packed, so offsetof(dirent, d_name) != sizeof(dirent). Thus in order not to waste the alignment bytes (which are significant, on x86_64 at least, sizeof(dirent)==32, but offsetof(...)=26.) This is also the most portable way to handle things, and should work just fine in cross-platform code that has a non-zero-sized d_name.
|
#
057fe191 |
|
01-Sep-2021 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel: Break thread-related AutoLockers into a separate header. Including thread.h brings a massive array of things with it from the kernel thread arch headers, team and thread definitions, hash tables, linked lists, Referenceable, etc. that the vast majority of AutoLock.h consumers neither want nor need. So, put these in a separate header, and adjust all consumers of these lockers to include the new file. This change exposes the fact that a lot of files were inadvertently making use of headers included indirectly through thread.h. Those will be fixed in the next commit.
|
#
5b113c01 |
|
18-Apr-2021 |
Niels Sascha Reedijk <niels.reedijk@gmail.com> |
kernel: remove stray dprintf about acquire_advisory_lock Change-Id: I306e2816e59a621a4c478babad5f3aa2cc69fc8d
|
#
a9c09fca |
|
06-Nov-2020 |
Jérôme Duval <jerome.duval@gmail.com> |
POSIX: lseek: support SEEK_DATA and SEEK_HOLE constants this is queued for issue 8: https://www.austingroupbugs.net/view.php?id=415 this implementation calls the ioctl hook of the filesystem with BSD-like constants FIOSEEKDATA and FIOSEEKHOLE. if the hook doesn't know the constants, we use the stat size to return the last hole (as proposed in the draft spec). Change-Id: I5d052eed87e29b70491a7ff534e244896469d03e Reviewed-on: https://review.haiku-os.org/c/haiku/+/3385 Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
fe357eb9 |
|
05-Nov-2020 |
Jérôme Duval <jerome.duval@gmail.com> |
POSIX: add posix_fallocate and a preallocate syscall the preallocate syscall will call the preallocate filesystem hook, if available. fix #6285 Change-Id: Ifff4595548610c8e009d4e5ffb64c37e0884e62d Reviewed-on: https://review.haiku-os.org/c/haiku/+/3382 Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
3ac5d980 |
|
01-Jun-2020 |
Michael Lotz <mmlr@mlotz.ch> |
kernel/vfs: Fix array size off by one in _user_open_query. The BStackOrHeapArray was allocated with one byte less than user_strlcpy would write to, corrupting random heap memory. The error was introduced as part of hrev53864. Fixes #16175. Change-Id: I80e1a1bb104183545fbd2a2702cdf3dec089908d Reviewed-on: https://review.haiku-os.org/c/haiku/+/2860 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
10b5c00f |
|
20-May-2020 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel/vfs: follow up for hrev54107 _user_read_link: don't write after the buffer end, anytime the buffer is too short. It should honor the user bufferSize, instead of using the link length. normalize_path: null-terminates when bufferSize is lower than B_PATH_NAME_LENGTH. Change-Id: If3892dc1ffc4aa7a79a333bbe607449ca409a7f0 Reviewed-on: https://review.haiku-os.org/c/haiku/+/2752 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
cbb517ab |
|
15-Mar-2020 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Replace the mount mutex with a rw_lock. Since the entry_cache operations go through the mount lock, this may considerably speed up parallel entry cache operations. Change-Id: Ib2f841e288eb593ee3f795922103459c77764c22 Reviewed-on: https://review.haiku-os.org/c/haiku/+/2362 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
29927961 |
|
09-Feb-2020 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Add some missing initializations and BStackOrHeapArray. Part of #14961.
|
#
a9be0efb |
|
31-Aug-2019 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Add support for setting custom VMCaches in vnodes. This adds one (private) VFS function, and checks in all usages of the vnode->cache as a VMVnodeCache that it really is one. (Generic usages, for the moment just the ReleaseRef() calls in vnode destruction, are intentionally not touched.) This will be used by ramfs to set the cache from its own, so that map_file() calls on a ramfs can work.
|
#
69a9cd36 |
|
30-Jul-2019 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Free file descriptors via put_fd(), not free(). FDs are now object_cached, so this triggered an assert-failure panic trying to put them through the regular allocator. Just use put_fd to free these instead, so that there is only one "destruction" path for FDs. Fixes #15213.
|
#
a04ff4c7 |
|
19-Jul-2019 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Fix copy/paste error.
|
#
62f06d86 |
|
18-Jul-2019 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Use an object_cache for the file_descriptor structs. file_descriptor structs were (following the original packagefs changes) the 4th most allocated item during the boot, with 11903 instances. These are of course all rather ephemeral, as after the boot finished there were only 70-some-odd remaining (which is surprisingly low, I though.) During heavy system use, this will of course get hit much more often. So making them object_cached for both performance and memory reasons makes a lot of sense.
|
#
14cbb958 |
|
13-Jul-2019 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Unlock KPath buffers after copying them. Otherwise we will call UnlockBuffer() when we potentially never called LockBuffer(). Fixes #15157.
|
#
42e3c6f9 |
|
10-Jul-2019 |
Augustin Cavalier <waddlesplash@gmail.com> |
KPath: Use an object_cache for the path buffers in the normal case. This was (following the packagefs changes) the number-one (by call count) consumer of malloc() during the boot -- 52866 calls, and 100% of them either 1024 or 1025 bytes! Virtually all of these are ephemeral (indeed, the object_cache stats after a boot with this patch shows there is only a single slab of 64 buffers allocated, and most of them unused), so this is probably a significant performance boost. Change-Id: I659f5707510cbfeafa735d35eea7b92732ead666
|
#
858e5775 |
|
10-May-2019 |
Jérôme Duval <jerome.duval@gmail.com> |
vfs: fail only truncate on file descriptors opened read-only. chmod is allowed. Change-Id: Idcac38bdd7f0d614538421a41dfd30066a0c316f Reviewed-on: https://review.haiku-os.org/c/1444 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com> Reviewed-by: Axel Dörfler <axeld@pinc-software.de>
|
#
03ed26b6 |
|
29-Mar-2019 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel/fs/vfs: apply CLOEXEC on the new fd instead of the old one. fix a failure for test-cloexec.c of gltests. Change-Id: I340cc88a787a59d55f93cc80883f57e6627f38cf Reviewed-on: https://review.haiku-os.org/c/1332 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
|
#
fb1dd50e |
|
25-Feb-2019 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Make fs_mount::lock a mutex instead of a recursive_lock. Solves a TODO.
|
#
38c4c8bf |
|
20-Feb-2019 |
François Revol <revol@free.fr> |
kernel: fix mount arguments checks from userland Since NULL is not considered a user address anymore, we must check for it first. This fixes the "mount: Bad address" error after hrev52905. Change-Id: If60ea58bb81b6c35c6bf27ecfa9b29bd7a25d8aa
|
#
8497a2cc |
|
12-Jul-2012 |
ahenriksson <sausageboy@gmail.com> |
vfs: functions to change a vnode busy status and ID The kernel version is only partially tested. Change-Id: I9a2f6c78087154ab137eadbced99062a8a2dd688 Reviewed-on: https://review.haiku-os.org/c/918 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
f22ee592 |
|
22-Jan-2019 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Fix shadowed variables. The -Werror=uninitialized caught this, but I fixed it the wrong way rather than looking at the code a little closer. Should fix the strange bugs that cropped up after the first VFS patch.
|
#
3f77fdd1 |
|
21-Jan-2019 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/vfs: Fix -Werror=maybe-uninitialized.
|
#
cb0d3bd3 |
|
22-Jan-2019 |
Leorize <leorize+oss@disroot.org> |
kernel/fs/vfs: add truncation check for user_strlcpy calls **Lots** of syscalls here don't check if strlcpy truncated the user supplied argument. This commit adds them where appropriate. Closes #2642 Change-Id: Iff89055aeb3a1870c8baf327b60873ce85815cd7 Reviewed-on: https://review.haiku-os.org/c/890 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
e7e7a552 |
|
12-Dec-2018 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Account for vnode being NULL in vfs_release_posix_lock. When the FD is put() but not freed while O_DISCONNECTED, its "ops" and "vnode" are cleared. Thus it is entirely valid for a non-NULL file FD to have a NULL vnode, so we should just treat such FDs as if the locks had already been cleared (which they should have.) Fixes #14294.
|
#
bee962a2 |
|
12-Dec-2018 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Consumers of context->fds[] must check O_DISCONNECTED. Since these do not go through get_fd, which would check for them, we need to do these checks manually in the relevant locations. Some of these changes were broken out from axeld's original commit, and some were found by my own auditing.
|
#
15ec0b5c |
|
12-Dec-2018 |
Augustin Cavalier <waddlesplash@gmail.com> |
Revert "VFS: Slight rework of the FD disconnect feature." This reverts commit eb62d3337b82f4dce6b1a0b3f116e38491c66f14.
|
#
8c053e95 |
|
17-Nov-2018 |
Jérôme Duval <jerome.duval@gmail.com> |
vfs: fail write_stat() on file descriptors opened read-only. Change-Id: I20d586c606c47df6625cc9272f153250a5a621d6 Reviewed-on: https://review.haiku-os.org/706 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
74e882b3 |
|
10-Sep-2018 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/fs: Flush the underlying device's write cache as part of sync(). BFS does this as part of journal management, but not as part of block cache synchronization (which makes sense, as flushing it then would defeat the purpose of the drive's write cache.) No other file system seems to touch it at all, so we should do it as part of an explicit sync. This may help with some of the filesystem corruption issues, as it seems that on slow disks, the drive might not have enough time to flush the cache before it is powered off (or on some SATA/AHCI based disks, it is not flushed before close at all), so triggering it here and, as the ioctl is supposed to be synchronous, waiting for it also, seems to make sense. Change-Id: I7d9992c21ca4b59c839711dcc96c973b4b8df052 Reviewed-on: https://review.haiku-os.org/530 Reviewed-by: Jérôme Duval <jerome.duval@gmail.com> Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
0217e08a |
|
21-Aug-2018 |
Augustin Cavalier <waddlesplash@gmail.com> |
vfs: panic() if volume->ops is NULL but status == B_OK. This panic, unlike the NULL dereference that would otherwise occur, is at least continuable.
|
#
de6ea5f4 |
|
10-Jul-2018 |
Augustin Cavalier <waddlesplash@gmail.com> |
vfs: Move volume->ops NULL check to just after call to mount(). As Rene pointed out on the mailing list, if this is NULL after the file system mount call occurs, then something has gone very wrong and we should treat it as an error.
|
#
131c64ad |
|
09-Jul-2018 |
Augustin Cavalier <waddlesplash@gmail.com> |
vfs: Add missing NULL check of volume->ops. I got a reproducible KDL that upon close inspection seems to have been a NULL dereference of this, thanks to GCC's mix-source-and-assembly functionality. Unfortunately, I deleted my mount_server settings before I fully understood what was going on, and afterwards it no longer reproduced, so it seems to have been related to that. I'm confident enough this is the correct fix to commit it anyway.
|
#
4f5ed463 |
|
30-Jun-2018 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel: vfs: common_fcntl() now uses memcpy() for kernel calls. instead of user_memcpy(). * fix #14204: the NTFS filesystem kernel addon uses the fcntl system call to lock the underlying device. The user_memcpy replacement in the x86 compat branch adds range checks for the user pointer, which exposes such problems.
|
#
4f7b9506 |
|
14-Jun-2018 |
Augustin Cavalier <waddlesplash@gmail.com> |
Revert the rest of the COMPAT_MODE changes (back to hrev52003.) This reverts commit 458e758f3792ef11ca26d6ff7e24600c88326e83. This reverts commit ce5eb94a82b1b377ef5909e65411e031f54ceb15. This reverts commit aac8d4c317ca11a9a6e194e2c668e8183ec23dd6. This reverts commit c70cba914aa79c01bbc2da38085936f589899c8c. This reverts commit 2ffbe7aaca8668c5a68ac7488459bace7a0700f2 This reverts commit c6e120e2d2f909d95f95839fa99fccf811fdb3c5.
|
#
2ffbe7aa |
|
18-May-2018 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel/x86_64: compatibility syscalls for vfs.cpp. * define compat_flock, compat_timespec, compat_stat, compat_attr_info, compat_fs_info, compat_fd_info to be used for respective 32-bit types of syscalls in compatibility mode. * handle 32-bit types in common_fcntl(), _user_read_stat(), _user_stat_attr(), _user_read_index_stat, _user_read_fs_info, _user_write_fs_info, _user_get_next_fd_info, other syscalls are compatible as is. Change-Id: I5b372169fe142f67b81fd6c27e0627d5119ba687
|
#
8bca37d6 |
|
14-Jan-2018 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
vfs: Bind flock locks to file descriptors * File locks created by flock should only apply for the file descriptor that was used to lock the file. Another fd on the same file should then be denied access (calling flock should fail). * fcntl based locks, however, are in a separate namespace and are global to a team. * This issue was found when running webkitpy test suite, and should close ticket #13795. * Don't use session or team as comparison in release_advisory_lock(), as that information might not be available anymore (e.g. when called from Team::~Team()). This fixes #14121. Change-Id: I9efb96cfcefe7e72b0060220c635a665e7e643cc Co-authored-by: Axel Dörfler <axeld@pinc-software.de>
|
#
7750fdcf |
|
18-Apr-2018 |
Axel Dörfler <axeld@pinc-software.de> |
vfs: _user_flock() did not use FS advisory locking calls * The kernel's advisory locking implemenation must not be used if the file system has its own (ie. network file systems). * Added ASSERT to free_vnode() that assures there is no locking left; I recently had a lot of them around.
|
#
a9388f6d |
|
20-Jan-2018 |
Xiang Fan <sfanxiang@gmail.com> |
kernel: vfs: don't notify output-only select events by default Output-only events (B_EVENT_ERROR, B_EVENT_DISCONNECTED and B_EVENT_INVALID, with B_EVENT_INVALID masked out before passing down events) are used to indicate error, so they should not be notified if the vnode does not have select(). Bug: 13965
|
#
9fbffea6 |
|
07-Jan-2018 |
Jérôme Duval <jerome.duval@gmail.com> |
kernel: vfs: don't use the attribute name user buffer directly. instead copy the name on the stack.
|
#
e46e9fee |
|
03-Jan-2018 |
Jérôme Duval <jerome.duval@gmail.com> |
vfs: check userland buffers before reading them.
|
#
019828ab |
|
17-Dec-2017 |
Augustin Cavalier <waddlesplash@gmail.com> |
VFS: Add proper locking of the team structure in disconnect_mount_or_vnode_fds. The KDL in #13861 was apparently caused by a NULL io_context. I read over the Team code and have applied the following fixes here as a result: 1. A NULL io_context is entirely possible, as implied by the NULL check before deinitializing it in Team's destructor, so account for that. 2. Team objects have a class-wide lock which must be acquired before directly accessing class members, so use that here. First part of the fix for #13861.
|
#
26740b28 |
|
24-Aug-2017 |
Jérôme Duval <jerome.duval@gmail.com> |
POSIX: F_DUPFD_CLOEXEC support (POSIX.1-2008). * fix #12187.
|
#
2d4d0f0a |
|
12-Jul-2017 |
Jérôme Duval <jerome.duval@gmail.com> |
Revert "vfs.cpp: Fix gcc6 crash." This reverts commit 5b55f6dba9d905e26729961a146de825277c9d79.
|
#
5b55f6db |
|
10-Jul-2017 |
Murai Takashi <tmurai01@gmail.com> |
vfs.cpp: Fix gcc6 crash. Signed-off-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
16825fd9 |
|
30-Apr-2017 |
Axel Dörfler <axeld@pinc-software.de> |
VFS: Pass on NULL for NULL paths, if allowed. * Uses the new KPath::LAZY_ALLOC feature. * This closes ticket #9625.
|
#
eac83fb3 |
|
30-Apr-2017 |
Axel Dörfler <axeld@pinc-software.de> |
KPath: Replaced booleans with flags field. * No functional change intended; I chose the flags in a way that it should still work even if I missed a reference.
|
#
742b85c1 |
|
02-Apr-2017 |
Axel Dörfler <axeld@pinc-software.de> |
vfs: Let new_vnode() and publish_vnode() wait for busy vnodes. * Both functions need to wait when encountering a busy vnode, in order not to create a race condition in combination with get_vnode(). * This should fix both #5262, and #9839. * I did not implement Ingo's suggestion to burden the file systems with solving the problem for the following reasons: - I think the file system interface should be as simple as possible. - I can't think of a possible locking issue at least for BFS. - The solution on the file system side would look pretty similar to what the VFS already does or has to do (minus controlling the locking directly), so it would cause quite a functional duplication.
|
#
67988f50 |
|
21-Mar-2016 |
Axel Dörfler <axeld@pinc-software.de> |
NodeMonitor: Resolve mount points for B_WATCH_CHILDREN. * When a watched directory contains a mount point, we need to resolve the actual parent directory of the mount point in the file system to serve the monitor.
|
#
ba307a12 |
|
08-Nov-2015 |
Michael Lotz <mmlr@mlotz.ch> |
vfs: Cleanup: Move functions around for more logical grouping. Move static internal functions out of the API functions block and drop their vfs_ prefix and move an API function into the API functions block.
|
#
c73d1301 |
|
08-Nov-2015 |
Michael Lotz <mmlr@mlotz.ch> |
kernel: Use anonymous namespaces to avoid type collisions. The anonymous namespace makes type definitions local to the translation unit (like static does for objects). For pretty much any type not shared across multiple files this is what one wants to happen (and might erroneously expect to happen automatically). This commit solves some actual collisions that were present: * The VFS and the rootfs both used an incompatible VnodeHash struct for their BOpenHashTable. * XSI semaphores and message queues both used queued_thread, Ipc and IpcHashTableDefinition. For release builds these did not cause problems as the types were fully inlined. Debug builds would crash at boot however because parts of a BOpenHashTable<VnodeHash> from the rootfs meant to operate on struct rootfs_vnode would be applied to one from the VFS expecting struct vnode. As such collisions are violations of the one definition rule, the code is at fault and unfortunatley the compiler isn't required to diagnose such problems across translation units (which isn't actually trivial). This can lead to subtle and hard to debug problems and it's therefore best to avoid leaking types into the global namespace whenever possible.
|
#
c518435b |
|
07-Nov-2015 |
François Revol <revol@free.fr> |
VFS: pass correct vnode to fs calls in default get_vnode_name The opendir and closedir/free_dircookie hooks were called with mismatched vnode. It seems only googlefs is actually affected by this, since all other fs without a get_vnode_name just don't are about the passed vnode arg to closedir and free_dircookie. Now I should really get some sleep!
|
#
8f4a653c |
|
07-Nov-2015 |
François Revol <revol@free.fr> |
VFS: typo
|
#
1e6dd3fe |
|
24-Apr-2015 |
Murai Takashi <tmurai01@gmail.com> |
Fix GCC 5 maybe-uninitialized warnings. Signed-off-by: Adrien Destugues <pulkomandy@pulkomandy.tk> Fixes #12020
|
#
13882115 |
|
11-Oct-2015 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
Implement stat.st_rdev for block and character devices. * devfs: set st_rdev to the inode number of the node being queried. This may not be the best thing to do, as it does not match what is set in st_dev for other files, so it can't be used to find which device stores a particular file. I'm not sure if st_rdev is actually used that way anywhere, however. * vfs: do not clobber st_rdev with -1 for "special" (device) files. Refactor the code a little so setting the common attributes is done in a single place. Fixes #12390.
|
#
13882115 |
|
11-Oct-2015 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
Implement stat.st_rdev for block and character devices. * devfs: set st_rdev to the inode number of the node being queried. This may not be the best thing to do, as it does not match what is set in st_dev for other files, so it can't be used to find which device stores a particular file. I'm not sure if st_rdev is actually used that way anywhere, however. * vfs: do not clobber st_rdev with -1 for "special" (device) files. Refactor the code a little so setting the common attributes is done in a single place. Fixes #12390.
|
#
eb62d333 |
|
11-Sep-2015 |
Axel Dörfler <axeld@pinc-software.de> |
VFS: Slight rework of the FD disconnect feature. * This should fix ticket #4157, although I probably have missed something. * In any case, it no longer messes with the ref counts of the file descriptor, and the race condition in put_fd() should be gone. * It's still rather messy all in all.
|
#
6adf7a0c |
|
11-Sep-2015 |
Axel Dörfler <axeld@pinc-software.de> |
VFS: prevent FD inheritance for the kernel completely. * Each io_context now has a "inherit_fds" member that decides whether or not this context allows to inherit FDs to its children. * This replaces the former O_CLOEXEC mechanism.
|
#
e668e80d |
|
11-Sep-2015 |
Axel Dörfler <axeld@pinc-software.de> |
VFS: Always open kernel FDs with O_CLOEXEC. * Avoids leaking them into userland.
|
#
5d4501aa |
|
20-Aug-2015 |
Michael Lotz <mmlr@mlotz.ch> |
Assorted whitespace cleanup and typo fixes.
|
#
efb0a3a8 |
|
17-Aug-2015 |
Michael Lotz <mmlr@mlotz.ch> |
EntryCache: Add entry_cache_add_missing() for negative caching. It provides a way for filesystems to cache a lookup failure and therefore prevents repeated lookups of missing entries. This is a common scenario for example in command lookup and compiling, where each directory in PATH or each include directory is searched for the given entry.
|
#
3395fdcd |
|
12-Jan-2015 |
Adrien Destugues <pulkomandy@gmail.com> |
gcc4 build fix. * offsetof is not allowed on non-POD types so we need to use offset_of_member (gcc2 accepts offsetof, and C++11 relaxed the constraints on where it is allowed so it should work there too) * we have offset_of_member as a workaround until we switch to C++11, move it from khash (which is soon to be removed) to list.h which is the other place where it is used (for this one single call in our whole codebase) Also fix a typo in vfs.cpp.
|
#
f9defd45 |
|
12-Jan-2015 |
Adrien Destugues <pulkomandy@gmail.com> |
VFS: migrate to BOpenHashTable.
|
#
76b8f002 |
|
04-Nov-2014 |
François Revol <revol@free.fr> |
Implement lseek(SEEK_END) on devices While the partitioning system does publish partitions as block devices and report their size in stat(), the old BeOS-style drivers have no means of reporting it this way. So we fall back to ioctl(B_GET_GEOMETRY) to find out the size.
|
#
22ea3415 |
|
01-Nov-2014 |
Jessica Hamilton <jessica.l.hamilton@gmail.com> |
access: fix to be POSIX compliant
|
#
6bbd25f0 |
|
29-Oct-2014 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Make vfs_resize_fd_table() accessible in the kernel Also update some types from int to uint32.
|
#
5a95af70 |
|
25-Oct-2014 |
Axel Dörfler <axeld@pinc-software.de> |
vfs/{b|btr|package|b}fs/ext2/exfat: common access check. * Added VFS helper function check_access_permissions() that combines several partially correct versions to the one true version (tm). * All but BFS (since recently) missed the S_IXOTH for root on directories, and all but packagefs missed proper group handling.
|
#
8efd5b76 |
|
25-Oct-2014 |
Axel Dörfler <axeld@pinc-software.de> |
vfs: check the X permission on set cwd. * When you change the current working directory, you actually should have the permission to enter that directory. * This gives us a 0.04% better score on the perl test suite :-)
|
#
8ea3e912 |
|
18-Oct-2014 |
Michael Lotz <mmlr@mlotz.ch> |
Typo: Fix doubled "not" in comment.
|
#
d64267ff |
|
09-Jun-2014 |
Jérôme Duval <jerome.duval@gmail.com> |
vfs: checks whether the mount's unmounting flag is already set. * thanks to Ingo for suggesting the idea, quoting him: "by holding sVnodeLock read-locked, get_mount() ensures that fs_unmount() can't process the nodes. If it is already past that point, the root node check (not NULL, not busy, ref count > 0) is supposed to detect that. But it doesn't look like this can work. fs_unmount() doesn't set the root node to NULL (the root node field is NULL only during a short period in fs_mount()), but it just frees the nodes after releasing sVnodeLock. So the not busy and ref count > 0 checks could already access freed memory". * tested OK, this fixes #10522. * replaced mount->root_vnode by the local variable with the same value.
|
#
38b150a9 |
|
24-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS FIFO: Add "fifo" KDL command Prints information about a FIFO node and, optionally, its data buffer content.
|
#
104c0688 |
|
11-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
dir_vnode_to_path(): Fix uninitialized status variable
|
#
07f6506e |
|
11-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS: Fix broken zero_pages() Besides that it failed to actually iterate through the vectors, it shouldn't try to clear physical memory in the first place. The iovecs refer to virtual address ranges. Rename it to zero_iovecs() to avoid confusion.
|
#
18640f25 |
|
10-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
vfs: dir_vnode_to_path(): Fix bug with chroot on mount Simplify the code, which also fixes the bug that the I/O context's root was ignored when it was a mount point, thus resulting in globally rooted paths in this case.
|
#
726e47bb |
|
10-Sep-2013 |
Siarzhuk Zharski <zharik@gmx.li> |
vfs:Remove extra put_vnode call on error B_LINK_LIMIT exit Fixing the autoconf test: attempt to create file in place of already existing symlink. On error exit put_vnode was called explicitly before returning error. The second, implicit call to put_vnode was issued on destroying the VNodePutter instance that references the same vnode. At this time the vnode has references count equal to 0 so corresponding panic was executed. Great thanks to Ingo for pointing it out! Fixes #9140.
|
#
a56422b4 |
|
01-Aug-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS: fs_mount(): fix FS name leak Fixes #9909.
|
#
311e1487 |
|
29-Apr-2013 |
Jérôme Duval <jerome.duval@gmail.com> |
vfs: fixed two warnings. * warnings about comparison between signed and unsigned integer expressions.
|
#
237127fb |
|
22-Apr-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fix _user_entry_ref_to_path() in chroot * Add "bool kernel" parameter to vfs_entry_ref_to_path(), so it can be specified for which I/O context the entry ref shall be translated. * _user_entry_ref_to_path(): Use the calling team's I/O context instead of the kernel's. Fixes the bug that in a chroot the syscall would return a path for outside the chroot.
|
#
5b6fb78c |
|
05-Apr-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS: _kern_open_dir(): Fix NULL path case It would create an empty path buffer and pass that on to dir_open(), which accepts NULL, but not empty paths.
|
#
8627383b |
|
22-Mar-2013 |
Alex Smith <alex@alex-smith.me.uk> |
Fixed compilation errors with ENABLE_TRACING set.
|
#
1aef6664 |
|
22-Mar-2013 |
Alex Smith <alex@alex-smith.me.uk> |
Fixed compilation of VFS/IORequest trace messages.
|
#
1a0386d7 |
|
12-Mar-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
Fix #8661: fcntl(fd, F_GETLK, ...) violates POSIX The standard states that F_GETLK should check whether given lock would be blocked by another one and return description of the conflicting one (or set l_type to F_UNLCK if there is no collision). Current implementation of F_GETLK performs completely different actions, it "Retrieves the first lock that has been set by the current team". Moreover, if there are no locks (advisory_locking == NULL) an error is returned instead of l_type set to F_UNLCK.
|
#
d50875de |
|
02-Dec-2012 |
Michael Lotz <mmlr@mlotz.ch> |
Use format macros in debug output.
|
#
195a0f35 |
|
21-Jul-2012 |
Alex Smith <alex@alex-smith.me.uk> |
Changed argument type of fcntl syscall from uint32 to size_t. Since this argument may be used to pass pointers, uint32 is not correct for 64-bit. Effectively no change on 32-bit targets, both size_t and uint32 are unsigned long there.
|
#
c3f0fd28 |
|
12-Jul-2012 |
Alex Smith <alex@alex-smith.me.uk> |
Fixed formatting of output in some debugger commands. Currently all debugger commands assume 32-bit pointers when formatting their output. This means that on x86_64 the output is incorrectly formatted. Fixed this by adding a B_PRINTF_POINTER_WIDTH definition (16 on 64-bit, 8 on 32-bit), and using this to correctly format the output. Not all commands have been fixed yet, but all VM, slab, VFS, team, thread and image commands should be correct.
|
#
d764d148 |
|
27-Jun-2012 |
Pawel Dziepak <pdziepak@quarnos.org> |
Allow file systems to manage file locks Haiku implements file locking at vfs level. That would not work for remote and shared file systems, since they need to negotiate locks with peers. This patch introduces three additional hooks in fs_interface that allow file system module to take over the management of file locks.
|
#
4be4fc6b |
|
15-Jun-2012 |
Alex Smith <alex@alex-smith.me.uk> |
More 64-bit compilation/safety fixes.
|
#
4bbb27e3 |
|
12-Feb-2012 |
Jerome Duval <jerome.duval@gmail.com> |
More 'GCC4.6 variable set but not used' fixes.
|
#
7ef47de9 |
|
13-Feb-2012 |
czeidler <haiku@clemens-zeidler.de> |
Revert "Finally applying the patch that adds support to add path information to stat and attr monitor messages." Will recommit it when I have more time to work on the todos. This reverts commit 610ef6c00781522022455c0cbf34495420b2db1d.
|
#
610ef6c0 |
|
21-Jan-2012 |
czeidler <haiku@clemens-zeidler.de> |
Finally applying the patch that adds support to add path information to stat and attr monitor messages. * for all open FD the path information is stored in a map * this info is used to fill the missing fields in the node monitor
|
#
04999b6c |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Completed vfs_bind_mount_directory() support We don't need to explicitly track the covered/covering nodes per mount after all. In fs_unmount() we iterate through all vnodes multiple times anyway and can deal with the covers/covered_by vnodes there. Also, the root vnode doesn't need to be handled specially anymore.
|
#
1b08a68a |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
vfs_bind_mount_directory(): Fail if unmounting
|
#
8855625e |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
fix_dirent(): Fix ref count leaks * Only get an additional parent reference, when going to call vnode_path_to_vnode(). * Put the reference of the vnode vnode_path_to_vnode() returns.
|
#
e4320fd7 |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
remove_vnode(): Also consider covering vnode busy
|
#
54e721af |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add support for bind-mounting directories * Add support function vfs_get_mount_point(), so a file system can get its own mount point (i.e. the node it covers). Re-added fs_mount::covers_vnode for that purpose -- the root node isn't know to the VFS before the mount() hook returns. * Add function vfs_bind_mount_directory() which bind-mounts a directory to another. The Vnode::covers/covered_by mechanism is used, so this isn't true bind-mounting, but sufficient for what we need ATM and cheaper as well. The vnodes connected thus aren't tracked yet, which is needed for undoing the connection when unmounting. * get_vnode_name(): Don't use dir_read() to read the directory. Since we have already resolved vnode to the covered vnode, we don't want the dirents to be "fixed" to refer to the covering nodes. Such a vnode simply wouldn't be found.
|
#
f4a1387c |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add vfs_ prefix to resolve_vnode_to_covering_vnode()
|
#
47ea54c5 |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Generalize use of Vnode::covered_by/covers * Introduce Vnode flags for covered and covering. Can be used as a quick check when one doesn't already hold sVnodeLock. * Rename resolve_mount_point_to_volume_root() to resolve_vnode_to_covering_vnode(). * Adjust all code that deals with transitions between mount points and volume root vnodes to generally support covered/covering vnodes.
|
#
02be66ca |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Replaced fs_mount::covers_vnode by Vnode::covers Introduce a Vnode::covers field. It is currently only used for the root node of an fs_mount, replacing fs_mount::covers_vnode.
|
#
7bb72b8d |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Comment typo fixes
|
#
a735bdeb |
|
31-Oct-2011 |
Michael Lotz <mmlr@mlotz.ch> |
Align all filesystem relevant places to use B_UNSUPPORTED for unsupported instead of a mix of B_NOT_SUPPORTED and B_UNSUPPORTED. This allows checking for a specific error code. Probably one of those should be phased out... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43025 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d5e36fb5 |
|
10-Aug-2011 |
Axel Dörfler <axeld@pinc-software.de> |
* Introduced new fs_lopen_attr_dir() function that opens the attribute directory of a file without traversing leaf links (just like lstat()). * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42620 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
33272012 |
|
10-Aug-2011 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed reversed handling of O_NOTRAVERSE in attr_open(), and attr_create(). * Added support for O_NOFOLLOW for those two as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42619 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fe592884 |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Completed vfs_bind_mount_directory() support We don't need to explicitly track the covered/covering nodes per mount after all. In fs_unmount() we iterate through all vnodes multiple times anyway and can deal with the covers/covered_by vnodes there. Also, the root vnode doesn't need to be handled specially anymore.
|
#
0be138ab |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
vfs_bind_mount_directory(): Fail if unmounting
|
#
19c48aa4 |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
fix_dirent(): Fix ref count leaks * Only get an additional parent reference, when going to call vnode_path_to_vnode(). * Put the reference of the vnode vnode_path_to_vnode() returns.
|
#
9561ddca |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
remove_vnode(): Also consider covering vnode busy
|
#
d61a8548 |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add support for bind-mounting directories * Add support function vfs_get_mount_point(), so a file system can get its own mount point (i.e. the node it covers). Re-added fs_mount::covers_vnode for that purpose -- the root node isn't know to the VFS before the mount() hook returns. * Add function vfs_bind_mount_directory() which bind-mounts a directory to another. The Vnode::covers/covered_by mechanism is used, so this isn't true bind-mounting, but sufficient for what we need ATM and cheaper as well. The vnodes connected thus aren't tracked yet, which is needed for undoing the connection when unmounting. * get_vnode_name(): Don't use dir_read() to read the directory. Since we have already resolved vnode to the covered vnode, we don't want the dirents to be "fixed" to refer to the covering nodes. Such a vnode simply wouldn't be found.
|
#
313e1e37 |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add vfs_ prefix to resolve_vnode_to_covering_vnode()
|
#
2e21fc54 |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Generalize use of Vnode::covered_by/covers * Introduce Vnode flags for covered and covering. Can be used as a quick check when one doesn't already hold sVnodeLock. * Rename resolve_mount_point_to_volume_root() to resolve_vnode_to_covering_vnode(). * Adjust all code that deals with transitions between mount points and volume root vnodes to generally support covered/covering vnodes.
|
#
3cc71079 |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Replaced fs_mount::covers_vnode by Vnode::covers Introduce a Vnode::covers field. It is currently only used for the root node of an fs_mount, replacing fs_mount::covers_vnode.
|
#
9280379a |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Comment typo fixes
|
#
24df6592 |
|
11-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged signals-merge branch into trunk with the following changes: * Reorganized the kernel locking related to threads and teams. * We now discriminate correctly between process and thread signals. Signal handlers have been moved to teams. Fixes #5679. * Implemented real-time signal support, including signal queuing, SA_SIGINFO support, sigqueue(), sigwaitinfo(), sigtimedwait(), waitid(), and the addition of the real-time signal range. Closes #1935 and #2695. * Gave SIGBUS a separate signal number. Fixes #6704. * Implemented <time.h> clock and timer support, and fixed/completed alarm() and [set]itimer(). Closes #5682. * Implemented support for thread cancellation. Closes #5686. * Moved send_signal() from <signal.h> to <OS.h>. Fixes #7554. * Lots over smaller more or less related changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42116 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8775d8d2 |
|
05-Mar-2011 |
Jérôme Duval <korli@users.berlios.de> |
dir_remove() now handles a path which ends with "/./" and fixed #6817. Another way would be to disallow removing such a path, as Linux does. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40819 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
548836e4 |
|
02-Mar-2011 |
Jérôme Duval <korli@users.berlios.de> |
* if ioctl hook wasn't found, now returns B_DEV_INVALID_IOCTL * in case fd_ioctl() was about to return B_DEV_INVALID_IOCTL, translate to ENOTTY to satisfy #7279. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40787 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
137c5fe2 |
|
16-Jan-2011 |
Oliver Tappe <zooey@hirschkaefer.de> |
* add implementation of bindfs, which can be used to bind-mount a folder to some other place in the filesystem hierarchy * add helper function to VFS that encapsulates the "conversion" of a vnode-pointer to a fs_vnode-pointer (used by bindfs) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40238 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4535495d |
|
10-Jan-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged the signals branch into trunk, with these changes: * The team and thread kernel structures have been renamed to Team and Thread respectively and moved into the new BKernel namespace. * Several (kernel add-on) sources have been converted from C to C++ since private kernel headers are included that are no longer C compatible. Changes after merging: * Fixed gcc 2 build (warnings mainly in the scary firewire bus manager). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
66e85572 |
|
02-Jan-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
common_rename(): Fixed incorrect check (array address instead of first element, CID 4077). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40082 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2757dc8c |
|
21-Nov-2010 |
François Revol <revol@free.fr> |
Fix build with VFS_PAGES_IO_TRACING. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39566 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
31d8c43d |
|
28-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed CID 1262: waitForLock was not only -1 when exiting the loop, it didn't make much sense to wake up any waiters either in this case. * Fixed doubled semaphore deletion. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38418 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
87de0cb4 |
|
17-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed CID 1199-1202: only call the cache listener in case the open succeeded (this might also have derefenced a potentially freed vnode). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8e855d52 |
|
02-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Changed some POSIX error codes to native ones. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37842 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c019945c |
|
17-Jul-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added detail to the comment about why we can't call the create() hook without O_EXCL. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37555 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1cdc3cbb |
|
18-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
The vnode cache also considers the address space low resource state, now. Together with vnode associated structures like file cache, VMCache, and file system specific structures the impact on heap usage (and thus address space) is considerable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37169 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
435c43f5 |
|
02-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced type generic_io_vec, which is similar to iovec, but uses types that are wide enough for both virtual and physical addresses. * DMABuffer, IORequest, IOScheduler,... and code using them: Use generic_io_vec and generic_{addr,size}_t where necessary. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36997 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9d570af7 |
|
24-May-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Changed the type of the "op" parameter of the fs_vnode_ops::ioctl() hook and the _kern_ioctl() syscall from ulong to uint32. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36927 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1888e228 |
|
14-Apr-2010 |
Michael Lotz <mmlr@mlotz.ch> |
bonefish+mmlr: The O_CLOEXEC open mode wasn't actually set in the close-on-exec bitmap causing all files opened with O_CLOEXEC (like done in the storage kit classes) to still be inherited. This caused for example to be unable to unmount volumes when opening apps while Tracker touched some files (i.e. copying some large files) since these apps would inherit the file descriptor and therefore keep the volume busy. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36273 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
74fc3e9a |
|
14-Apr-2010 |
Michael Lotz <mmlr@mlotz.ch> |
bonefish+mmlr: * Add file descriptor and IO context tracing. * Some minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36272 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7d9bce24 |
|
27-Feb-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
debug_resolve_vnode_path(): Avoid duplicate slash at the beginning of the path. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35642 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c35e2c70 |
|
26-Feb-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added option "-p" to the "vnode" debugger command. Using the entry cache it tries to resolve the vnode's path. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35626 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
21d9331e |
|
23-Feb-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Beautified the output of the "io_context" command. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35582 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d0e43cc7 |
|
24-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
"vnode" does now also print the node type. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35280 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fb1819be |
|
07-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Eliminated sVnodeCoveredByMutex. The Vnode::covered_by field is now also protected by the global vnodes lock. The contention mostly moves to other locks, though. The total -j8 Haiku image build time is only reduced minimally. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34938 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7fc65e14 |
|
03-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
fs_unmount(): We need to hold the vnodes write lock after all. The upside is that it saves us from locking the individual vnodes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34872 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a210e610 |
|
03-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* free_unused_vnodes(): Be a good citizen and use vnode_used() instead of playing with the unused list manually. This also clears the vnode's unused flag, which wasn't done before and would thus cause corruption of the unused list a bit later. * fs_unmount(): - Fixed an iteration bug I introduced previously. The iterator would be advanced twice per iteration, leading to NULL pointer dereferencing when the vnode count was odd and skipping the checks for every other vnode. - All vnodes are going to be freed, so vnode_to_be_freed() has to invoked for every one of them. The code wasn't adjusted correctly when introducing the hot vnodes handling. * Adjusted/improved some comments. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34871 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
54848900 |
|
02-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Moved the unused vnode management to a new file. Well the few variables used for it that is. * The main cause for the heavy contention of the unused vnodes mutex was that relatively few vnodes are actually used for a longer time. Mainly those are the volume roots, mmap()ed files, and the files opened by programs. A good deal of nodes -- particularly directories -- are just referenced for a very short time, e.g. to resolve a path to a contained entry. This caused those nodes to be added to and removed from the unused vnodes list very frequently, thus resulting in a high contention of the mutex guarding it. To address the problem I've introduced an approximation of a set of "hot" vnodes, i.e. vnodes that have recently been marked unused. They are stored in an array that by means of an r/w locker and atomic operations can most of the time be accessed concurrently. Whenever it gets full, it is flushed to the actual unused vnodes list. * dec_vnode_ref_count(): No longer check the unused vnode count every time. The called new vnode_unused() does only from time to time and returns when the caller is expected to free some of the unused vnodes. As a side effect this also fixes a bug I previously introduced: The unused vnode to be freed was marked busy without being locked first. The -j8 Haiku image test build shows that the changes reduce the contention of the unused vnode list mutex to virtually zero without introducing any significant contention of the new r/w lock. The VMCache lock contention also seems to be decreased somewhat, which is probably not that surprising considering that the page writer acquires/releases vnode references with the cache lock held. The "pages" lock takes over even more contention, now causing more than 100000 waits per second. The total build time reduction is about 4.5%. Kernel time drops more than 10%. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34866 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8ccbb781 |
|
02-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Moved the vnode structure (to by Vnode class at some time in the future) into its own header/source files. * Changed vnode's bit fields to a single, atomically changeable int32 using flags instead. Added respective accessor methods. * Added a per-vnode mutex-like lock, which uses 2 bits of the structure and 32 global "buckets" which are used for waiter lists for the vnode locks. * Reorganized the VFS locking a bit: Renamed sVnodeMutex to sVnodeLock and made it an r/w lock. In most situations it is now only read-locked to reduce its contention. The per-vnode locks guard the fields of the vnode structure and the newly introduced sUnusedVnodesLock has taken over the job to guard the unused vnodes list. The main intent of the changes was to reduce the contention of the sVnodeMutex, which was partially successful. In my standard -j8 Haiku image build test the new sUnusedVnodesLock took over about a fourth of the former sVnodeMutex contention, but the sVnodeLock and the vnode locks have virtually no contention to speak of, now. A lot of contention migrated to the unrelated "pages" mutex (another bottleneck). The overall build time dropped about 10 %. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34865 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fb5c39cb |
|
01-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Removed TODO again. I tried a similar event mechanism as used for busy pages in VMCache, but, if anything, that makes a -j8 build marginally slower. I guess busy vnodes are encountered so rarely that the additional overhead for a more intelligent algorithm isn't really worth it. Reduced the wait time, though. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34845 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f42efbcd |
|
01-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Moved the entry cache implementation into its own file. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34843 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7a9b8baa |
|
01-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Made vnode::type private, renamed it to fType, and added accessor methods. It stores the value right-shifted by 12 bits, now, since those bits are not relevant. This saves some bits and also resolves a TODO. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34842 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3caec287 |
|
01-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Resolved TODO in free_vnode(): There was a race condition between vnode destruction and VMVnodeCache::AcquireUnreferencedStoreRef(). Solved by adding a flag to VMVnodeCache and letting AcquireUnreferencedStoreRef() fail, if set. * Added TODO regarding replacing the snooze() waiting for busy vnodes. * get_vnode(): Unlock sVnodeMutex while calling the put_vnode() hook on error. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34841 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e50cf876 |
|
02-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Moved the VM headers into subdirectory vm/. * Renamed vm_cache.h/vm_address_space.h to VMCache.h/VMAddressSpace. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34449 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a477e3cf |
|
01-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Finished renaming of vm_cache to VMCache. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34424 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f31ffa6b |
|
26-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Use O_CLOEXEC when open directories, attribute directories, indexes, and queries. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34291 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
486fffda |
|
26-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Forgot to add linkat(), this really closes #4928 now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34289 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fb2500da |
|
26-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Added missing AT_EACCESS. * Implemented renameat(), faccessat(), fchownat(), fchmodat(), and mkfifoat(). * Added stub for mknodat(). * The kernel backend for faccessat() does not yet differentiate between effective and real user/group IDs, though. * Removed B_ENABLE_INCOMPLETE_POSIX_AT_SUPPORT, as we now support everything (more or less). This also closes ticket #4928. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34288 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7ce581d7 |
|
26-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Eliminated the extra buffer in dir_vnode_to_path(); we write directly to the specified buffer now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34282 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
00362625 |
|
26-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Added support for O_NOFOLLOW. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34279 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
432bb91f |
|
25-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* dir_vnode_to_path() now uses B_* error codes instead of POSIX ones, and also returns the correct error code if the buffer was too small (should be ERANGE instead of ENOBUF). * Also, it is now independent of B_PATH_NAME_LENGTH, and therefore should fulfill POSIX getcwd() requirements. This should also close ticket #3352. * Is there any reason to allocate another buffer instead of using memmove() at the end instead of memcpy()? git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34276 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1ba04177 |
|
25-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* load_image() now has exec() semantics wrt file descriptors; before each team would always inherit them all, causing quite a number of open files. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34247 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
713cc7fc |
|
17-Nov-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added fs_read_attr(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34085 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c3dbe626 |
|
10-Nov-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
_user_open_dir(): Allow a NULL path to be passed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33973 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f40c5e32 |
|
05-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* common_rename() now checks the name for validity before passing it on to the file systems, so those checks don't have to be duplicated there, anymore. * Minor cleanup, mostly automatic whitespace. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33895 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
095a7d84 |
|
18-Oct-2009 |
Jérôme Duval <korli@users.berlios.de> |
using chroot with a mount point wrongly exposed the mount point name: we now avoid resolving the volume root in case we hit the IO context root. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33645 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a9689e84 |
|
30-Sep-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* VFS: - Fixed vfs_get_vnode_from_fd() return type. - Added vfs_open_vnode(). - Added a "bool traverseLeafLink" parameter to vfs_get_fs_node_from_path(). It was always resolving symlinks. * device manager/devfs: - devfs: get_node_for_path() no longer resolves leaf symlinks. That still doesn't help with file disk devices, as creating partition wouldn't work anyway. - Pulled the module-related implementation part of BaseDevice into new class AbstractModuleDevice and made all methods of BaseDevice virtual. Small adjustments to devfs to be happy with the new BaseDevice interface. - Added BaseDevice subclass FileDevice, which maps the interface to a file's file descriptor. Still got a few TODOs, but should basically work. - Use FileDevice for publishing file disk devices in devfs. Now those do actually work, though there's some BFS trouble with one of the images I tested. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33385 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a2bb3414 |
|
01-Sep-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Cleanup, no functional change. + alphabranch git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32890 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7435db9f |
|
14-Aug-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* _user_read_dir(): Allocate a temporary heap buffer passed into the kernel instead of using the user buffer. This frees the VFS and FS implementations from handling user buffers. * Adjusted fix_dirent() accordingly. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32384 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
368fc35a |
|
13-Aug-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Also have the uppper limit check in the assert. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32323 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
48cb56d8 |
|
13-Aug-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* We also shouldn't try to copy if the dirent is too large, obviously. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32314 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f9ba5c92 |
|
12-Aug-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Let fix_dirent() handle invalid reclen's gracefully. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32306 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a068dcb1 |
|
11-Aug-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* cdda_read_dir() could copy too many bytes into the provided buffer (worst case was an unterminated string, though). * fix_dirent() did not copy the trailing null-byte. * Not yet entirely sure why, but this caused #4214. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32254 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f7a6506e |
|
06-Aug-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Replaced all "status < B_OK" with != B_OK - this should make the VFS layer more robust against broken (userland) file systems. * 80 character column cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32184 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
061d2ed1 |
|
30-Jul-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Creating a symlink now fails with B_NOT_SUPPORTED instead of B_READ_ONLY_DEVICE if it has a write hook. * This fixes bug #4141. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32004 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8ae594ff |
|
28-Jul-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Introduced dedicated syscalls for the deprecated BeOS fs_attr API. Before, each attribute access needed 3 syscalls, now only one as it should. * Renamed the new Haiku call fs_open_attr() to fs_fopen_attr(), and added a new function fs_open_attr() that takes a path (same semantics as the fs_[f]open_attr_dir() functions already present in BeOS). * Merged former _kern_open_attr(), and _kern_create_attr() into one syscall. * Cleaned up vfs.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31881 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5147963d |
|
26-Jul-2009 |
Stephan Aßmus <superstippi@gmx.de> |
headers/private/kernel/util/OpenHashTable.h, Hugo's version, is a bit nicer than Tracker's OpenHashTable.h which it should eventually replace. We've renamed the class to BOpenHashTable and changed the interface slightly so that HashTableLink became superfluous. Adapted all the code that used it. Since the OpenHashTables no longer clash, this should fix the GCC4 build. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31791 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6def1a63 |
|
26-Jul-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* In order to resolve mount points, fix_dirents() retrieved all vnodes from disk; but since mount points are always kept in memory, it makes much more sense to use lookup_vnode() instead. * As a side effect, directory listings are no longer aborted when they contain broken files that could not be retrieved anymore. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31775 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
874f2349 |
|
11-Jun-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Returning random stat data isn't really nice. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31010 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fa773c0a |
|
01-Jun-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
vnode_path_to_vnode(): Don't propagate the traverseLeafLink flag, if we've decided to recursively resolve a symlink. We only have to do the resolution when the flag is true anyway or the symlink is not the last component of our path, in which case we have to resolve it anyway. Fixes #3986. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30937 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ce4db6ae |
|
16-May-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* The covered vnode release was never put when it already was a mount point during fs_mount(). This fixes bug #3934. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30773 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
78e7cdae |
|
16-Apr-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Removed the get_next_removed_vnode() call again - besides the problems Ingo pointed out, there is also an unsolvable race condition with BFS that other file systems should share. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30204 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4e98292b |
|
15-Apr-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Introduced new call get_next_removed_vnode() to be able to iterate over removed but not yet deleted vnodes. * Simplified get_vnode_removed(). * Header cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30176 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3cf43c26 |
|
25-Mar-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Removed the fs_vnode_ops::create_dir() parameter for returning the ID of the newly created dir. The VFS really doesn't need it and for some file systems it might not be easy to get by. Several file systems (e.g. rootfs and fat) were ignoring the parameter anyway. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29719 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c9bc3be3 |
|
12-Mar-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Minor cleanup, no functional change. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29480 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
aa4ba93e |
|
08-Mar-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed src/system/kernel/device_manager/io_requests.{h,cpp} to IORequest.{h,cpp}. * Introduced public <io_requests.h> header. Currently it only declares the single function BFS uses. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29446 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
43b2ca91 |
|
02-Mar-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed wrong use of MutexLocker as pointed out by Korli - nice catch! This could have caused a number of problems. * Fixed coding style violation Ingo introduced. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29378 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5ecc4b37 |
|
01-Mar-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced ref-counting for the I/O contexts. * The I/O context related vfs_*() functions have io_context* instead of void* parameters/return values, now. * vfs_new_io_context(): Lock the parent I/O context before getting its table size. Otherwise the table size could change until we do. * vfs_resize_fd_table(): Fixed use of MutexLocker. We created only a temporary object, not one with function scope. * Renamed load_image_etc() to load_image_internal() and added a parameter for specifying the parent team of the one to create. * Introduced a kernel private load_image_etc() with a few more arguments than load_image(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29375 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f6d0017d |
|
28-Feb-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fixed duplicate parameter name. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29342 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2e47b62e |
|
27-Feb-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Consolidated '*' style. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29341 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ed3e5ec0 |
|
27-Feb-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* zero_pages() did not fill in the _bytes parameter correctly - it returned how many unclear bytes remained instead of how many were cleared. This caused sparse files to show garbage instead of empty space. This fixes bug #2889. * common_file_io_vec_pages() set "size" (size_t) from file_io_vecs::length which is off_t without taking into account that important information could be lost. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29339 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
63448c92 |
|
23-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Better do the check for "." and ".." after stripping off superflous leafs as otherwise a "rmdir ./" would still have caused the corruption. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29299 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
24a7f4c2 |
|
23-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Disallow removing the "." entry. We do the same for ".." already and it seems to be in line with what other systems do as well. Also fixes bug #3476. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29296 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
77b26c32 |
|
19-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
We need a longer filesystem string here to fit in all the possible layers. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29259 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
49004dc7 |
|
19-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Remove the additional fs_vnode_ops arugment from get_vnode() again as it's not needed at all when used as intended. Thanks Ingo for the explanation on how this is intended to work. Adjusted the overlay fs accordingly and updated/reverted the changes to the other filesystems. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29250 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b1a58597 |
|
18-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Add a new fs_volume op all_layers_mounted() that is called when all layers have been mounted. This is to allow layered filesystems to setup internal data that requires all the sub/super volumes to be available. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29248 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a26c2439 |
|
14-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
* Adding volume ops to the overlay filesystem. * Remove the previous method of applying the overlay by flags. In the future the overlay can just be mounted as a filesystem layer. This is probably how layers were intended to work in the first place. * Move the filesystem module info and filesystem name from the fs_mount to the fs_volume structure. Filesystem layering is done by having multiple layered volumes and we want to be able to have a different fs per layer. * Adapt VFS code to this move. * Implement mounting layered filesystems. Specifying multiple filesystems separated by a colon on mount will cause the layers to be set up and the corresponding filesystems to be mounted at that layer. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29199 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6e5f1227 |
|
13-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Handle the overlay request flag in publish_vnode() as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
00405f22 |
|
09-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
* Add an additional argument to get_vnode() that gets the fs_vnode_ops of the node. That is needed for a layered filesystem to be able to construct a full fs_vnode out of a volume/inode pair. * Adapt places where get_vnode is used. Sadly this is a C API and we can't just use a default NULL for that argument. * Introduce a flag B_VNODE_WANTS_OVERLAY_SUB_NODE that can be returned in the flags field of a fs get_vnode call. A filesystem can use this flag to indicate that it doesn't support the full set of fs features (attributes, write support) and it'd like to have unsupported calls emulated by an overlay sub node. * Add a perliminary overlay filesystem that emulates file attributes using files on a filesystem where attributes aren't supported. It does currently only support reading attributes/attribute directories though. All other calls are just passed through to the super filesystem. * Adjust places where a HAS_FS_CALL() is taken as a guarantee that the operation is supported. For the overlay filesystem we may later return a B_UNSUPPORTED, so make sure that in that case proper fallback options are taken. * Make the iso9660 filesystem request overlay sub nodes. This can be fine tuned later to only trigger where there are features on a CD that need emulation at all. If you happened to know the attribute file format and location you could build an iso with read-only attribute support now. Note that this won't be enough to get a bootable iso-only image as the query and index support is yet missing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29177 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c33667d4 |
|
01-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Fixing warnings under GCC4 in preparation to enable -Werror there as well: * Replaced the use of offsetof() for structs that aren't PODs. Add a offset_of_member() macro to util/khash.h because that's what it's used for in our cases. * Change the signature of add_debugger_command()/remove_debugger_command() on GCC > 2 to avoid the depricated conversion from string constants to char *. * Adding some "suggested" parenthesis. I know that not everyone likes that, but it pointed out at least one bug that is fixed here as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29113 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f58d8cf2 |
|
11-Jan-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* _user_flock() will no longer accept invalid operations, thus fixing bug #3141. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28889 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fbb7d4cd |
|
11-Jan-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* fs_write() is optional for read-only file systems. This fixes bug #3062 and also #3083 (although I could not reproduce the latter). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28881 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6a90578f |
|
06-Jan-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Removed a left-over mutex_unlock() that could cause a panic on removing a busy vnode. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28851 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5500d8a5 |
|
06-Jan-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* All file descriptors that only refer to a mount now keep the mount, ie. they won't call put_mount() before they are freed. Internally, this causes them to grab a reference to the mount's root vnode. * This fixes bug #3262. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28850 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
55ddbd7b |
|
13-Nov-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* When a file system reports -1 offsets in its fs_get_file_map() function, this will now accepted and regarded as sparse file data. FileMap::_Add() also correctly joins multiple vecs with that offset together, FileMap::Translate() will always report offset -1 even for offsets into that extent. * read_file_io_vec_pages() (or rather, its backend common_file_io_vec_pages()) now supports sparse files, and will just clear the memory it should read from offset -1 instead of passing a request to the vnode. * ext2 now correctly reports sparse files. This should close bug #2889, as well as #975. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28648 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7e621f16 |
|
05-Nov-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Use parse_expression() for argument parsing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28515 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
67804f25 |
|
27-Oct-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* fs_unmount() removed the vnodes of the fs_mount twice since r28215, triggering an assert. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28344 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e967b93a |
|
26-Oct-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* vfs_stat_node_ref(): Added missing initialization of stat::st_{dev,ino}. * stat::st_rdev is unused, but at least initialize it with some deterministing value. This makes Perl's lib/File/stat.t test happy. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28333 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1894a0a9 |
|
20-Oct-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Consistently use KDEBUG. It is always defined and therefore must be checked with "#if". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28247 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3b839d85 |
|
18-Oct-2008 |
Michael Lotz <mmlr@mlotz.ch> |
The fs_mount structure now has a constructor/destructor and is used with new and delete. Therefore the constructor/destructor of the contained EntryCache is also called. The manual call of the destructor to the OpenHashTable inside the EntryCache was therefore superflous and the destructor would be called twice, leading to bug #2869. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28232 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
703aecaa |
|
17-Oct-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Instead of having the mount_link, struct vnode now subclasses from DoublyLinkedListLinkImpl, and fs_mount now uses a DoublyLinkedList instead of a typeless struct list. * Also added a constructor/destructor to fs_mount which simplifies and cleans some code. * This should not contain any functional changes :-) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28215 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
552c8edc |
|
17-Oct-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* fs_sync() now holds the sVnodeMutex while iterating over the mount list. * This has the advantage that we no longer need to call get_vnode(), and instead can use lookup_vnode(). * This means at least most of the "corrupted BFS inode" messages should be gone; they were produced when fs_sync() tried to get already deleted vnodes. This was actually harmless, but doesn't really help in trusting your system :-) * Also, it no longer tries to write back removed vnodes. * And finally, it now uses a marker vnode when iterating over the list, so that it doesn't need to break out of the loop anymore, and can always sync all willing vnodes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28212 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e8d3eff9 |
|
26-Sep-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* vfs_normalize_path() and _user_normalize_path() use a common helper function (normalize_path()), now. There was some code duplication before. * Added "bool traverseLink" parameter to vfs_normalize_path(). When true and the leaf component is a symlink, it will be resolved. * KPath: - Added similar leaf link traversal parameter to SetTo() and SetPath(). - Added Normalize(). - Added DetachBuffer(), which returns the object's current buffer and unsets itself. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27751 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ee1a1571 |
|
07-Sep-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Implemented a simple directory entry cache to speed up path resolution. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27366 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2aa5367a |
|
24-Aug-2008 |
Jérôme Duval <korli@users.berlios.de> |
extended debug check for FS_CALL() to others FS_CALL() versions git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27189 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8cf7754b |
|
24-Aug-2008 |
Jérôme Duval <korli@users.berlios.de> |
added a check in FS_CALL() for null hooks in KDEBUG mode git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27188 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2fd4fdcf |
|
22-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Changed the way fix_dirent() copies the entry: it will now copy the complete dirent without the name first, and will then check if the d_reclen member is valid before copying the name. * This shows the problem with the FAT file system that was revealed by r26859. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27128 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a3afb5ee |
|
09-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Handy on-demand debug tracing, I've used a few times already. So I leave it commented out in the code for the time being. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26907 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
49a7b619 |
|
07-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* fix_dirent() now correctly handles buffers from userland. * dir_read() now takes into account that we may have read more than one dir entry, and calls fix_dirent() for each of them. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26859 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
58306fec |
|
02-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added tracing for vfs_{read,write}_pages). * {read,write}_pages() use vfs_{read,write}_pages() now, instead of invoking the FS {read,write}_pages() hooks. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26750 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
15374c5d |
|
02-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Renamed thread_spinlock and team_spinlock to gThreadSpinlock and gTeamSpinlock. * Renamed the static global variables in smp.c to match our style guide. * Minor other cleanup. * Removed superfluous white space. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26730 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9f6ae76f |
|
01-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added acquire_vnode() call that you can use to get another reference to an inode - unlike get_vnode() the busy flag won't prevent you from getting that reference. * Changed put_vnode() to return an error in case the vnode couldn't be found. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26713 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7f12cc54 |
|
30-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* It is now supported that I/O operations and requests are only handled partially (e.g. due to hitting the end of file). The respective classes have grown new methods and attributes to deal with that. The "finished" callbacks have got additional parameters to indicate whether the transfer was only partial and how much has been transferred. Other callbacks and functions have a size_t* in/out parameter instead of a simple size_t, now. * vfs_{read,write}_pages() do now use the I/O request framework instead of the underlying FS's {read,write}_pages() hooks (those should be unused now). Furthermore they've got an additional "flags" parameter, which is passed to IORequest::Init(), i.e. it allows to specify that the given vecs refer to physical addresses. * The file cache's read_into_cache() reads directly into physical pages, now. * Fixed bug in DoIO::IO(): The offset was not adjusted, so that all pages were incorrectly transferred from/to the same location. * Fixed broken subrequest scheduling loop head in do_iterative_fd_io_iterate(). * Adjusted the test driver and implemented its io() hook. Using this driver I/O requests are passed all the way from the VFS/VM to the driver and through the I/O scheduler. It even seems to work. :-) * Added missing const to the iovec* parameter of the IORequest::Init() methods. * Disabled some debug output by default. Added new optional debug output. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26692 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7df40c23 |
|
28-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added handy function volume_for_vnode() which returns the fs_volume for a given given fs_vnode. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26669 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ec598fe4 |
|
27-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added FS interface hooks io() and cancel_io(). The former is supposed to provide asynchrounous (or only synchronous, if asynchronous is not supported) I/O request support. It will eventually replace {read,write}_pages(). None of the FS implementations implement them yet. * Implemented some support functions for request-based I/O. File system implementations can use do_fd_io() which passes an I/O request to the layer responsible for a given FD, and do_iterative_fd_io(), which translates a request for a file to subrequests for the underlying device and passes them on. Both fall back to synchrounous processing when the io() hook is not supported. Furthermore added vfs_synchronous_io() which should be handy for the devfs to perform io_requests synchronously for devices that don't support the io() hook. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26655 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ef7fb431 |
|
23-Jul-2008 |
Rene Gollent <anevilyak@gmail.com> |
Remove extraneous put_vnode(). This would result in decrementing the vnode ref count even if an unmount operation failed, which in turn would cause other fun problems. This fixes tickets 1982 and 2538. However, there seems to be another problem remaining with unmounting: the placeholder dir in the rootfs is not removed when the volume is unmounted, or it's not reused correctly. As a consequence, on subsequent remounts of the same volume via Tracker or mountvolume, a new dir is created each time, leaving empty placeholders. (i.e. remounting the volume HaikuData results in the creation of /HaikuData1, 2, 3, 4, etc.). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26586 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e6bd90c5 |
|
23-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* bfs_fsync() was the only place which could cause the fs_vnode_ops::write_pages() to be called with fsReenter = true. Since this is no longer the case, the argument has become superfluous. For read_pages() it always was. Removed the argument from the functions and all functions that propagated it. * Some whitespace at the end of lines was removed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26579 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5c99d639 |
|
22-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged branch haiku/branches/developer/bonefish/vm into trunk. This introduces the following relevant changes: * VMCache: - Renamed vm_cache to VMCache, merged it with vm_store and made it a C++ class with virtual methods (replacing the store operations). Turned the different store implementations into subclasses. - Introduced MergeStore() callback, changed semantics of Commit(). - Changed locking and referencing semantics. A reference can only be acquired/released with the cache locked. An unreferenced cache is deleted and a mergeable cache merged when it is unlocked. This removes the "busy" state of a cache and simplifies the page fault code. * Added VMAnonymousCache, which will implement swap support (work by Zhao Shuai). It is not integrated and used yet, though. * Enabled the mutex/recursive lock holder asserts. * Fixed DoublyLinkedList::Swap(). * Generalized the low memory handler to a low resource handler. And made semaphores and reserved memory handled resources. Made vm_try_resource_memory() optionally wait (with timeout), and used that feature to reserve memory for areas. ... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26572 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
541959e0 |
|
17-Jul-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Add (not really necessary) locking of the sMountMutex in case of KDEBUG to keep the assert in find_mount() happy. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26484 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
60f2ef17 |
|
12-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added "partition_id partition" field to fs_volume, so that file systems can get the partition they reside on easily. * Updated TODO. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26401 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
92c3ae2b |
|
06-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Reverted r26293 again, as that "subtle" change also prevented any device I/O from happening... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26294 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
bed8516a |
|
06-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* file_{read|write}() now only accept regular files, and will return either B_BAD_VALUE or B_IS_A_DIRECTORY depending on the vnode type. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26293 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
469c26e7 |
|
06-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Since we now have a vnode::type field, several calls of read_stat() were no longer necessary. * Optimized file_seek() using this field, too; reading the stat is now only done when necessary. * file_read() and file_write() will now return B_IS_A_DIRECTORY so that not every file system has to care about that particular error code. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26292 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
52ecda6e |
|
06-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added some optional KDL command and statistics to the file map implementation. * Turned them on for now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26291 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a8f9741c |
|
04-Jul-2008 |
Michael Lotz <mmlr@mlotz.ch> |
* Removed -Wno-unused from all KernelMergeObjects in kernel Jamfiles. * Fixed most of the warnings resulting from that by removing actually not used variables or moving declaration into the #IF. Left unused functions there though, as I wouldn't know if they are supposed to be used again. * Fixed two statements with no effect (clamping to MAX_ANCILLARY_DATA_LEN in socket.cpp and unsetting fCounterSem in MessagingService.cpp). * Some style cleanups. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26253 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e1b630c5 |
|
28-Jun-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Replaced the global cache pages hash table by an IteratableSplayTree per cache. * Changed the strategy vm_cache_acquire_page_cache_ref() uses to ensure that the cache isn't deleted while trying to get a reference. Instead of the global cache pages hash table lock, it holds the global cache list lock now. We acquire + release this lock in delete_cache() after removing all pages and just before deleting the object. * Some small optimizations using the property that the cache's pages are ordered, now (vm_cache_resize(), vm_page_write_modified_page_range(), vm_page_schedule_write_page_range()). * Replaced some code counting a cache's pages by simply using vm_cache::page_count. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26160 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
285b754f |
|
24-Jun-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* dec_vnode_ref_count() can now also directly free the vnode if requested (and if it isn't used anymore). * vnode_low_memory_handler() now just calls it this way, so it doesn't have to use two passes anymore, and can always write back vnodes without having the busy flag set. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26124 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f5b3a6a7 |
|
05-Jun-2008 |
Michael Lotz <mmlr@mlotz.ch> |
* Initialize all static mutexes in the kernel through a MUTEX_INITIALIZER() and remove the then unneeded mutex_init() for them. * Remove the workaround for allowing uninitialized mutexes on kernel startup. As they are all initialized statically through the MUTEX_INITIALIZER() now this is not needed anymore. * An uninitialized mutex will now cause a panic when used to find possibly remaining cases. * Remove now unnecessary driver_settings_init_post_sem() function. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25812 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
032f1e5f |
|
01-Jun-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed an endless loop when using vfs_get_vnode_name() or the "wrong" get_vnode_name() variant. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25750 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3cec3084 |
|
30-May-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Fix build with TRACE_VFS enabled and also fix a warning. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25726 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b0f5179a |
|
28-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Changed recursive_lock to use a mutex instead of a semaphore. * Adjusted code using recursive locks respectively. The initialization cannot fail anymore, and it is possible to use recursive locks in the early boot process (even uninitialized, if in BSS), which simplifies things a little. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25687 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1e18692e |
|
26-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* get_vnode() now accepts a NULL parameter for the fsNode argument. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25660 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c44fb2a6 |
|
09-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Advisory locking fixes: * Made the access strategy to vnode::advisory_locking consistent. get_advisory_locking() was guarding it with sVnodeMutex, create_advisory_locking() was using atomic_pointer_test_and_set(), and release_advisory_lock() just set it unguardedly. We do use sVnodeMutex consequently, now. * Beautified create_advisory_locking() (got rid of the gotos, reorganized the control flow). * Fixed race conditions in acquire_advisory_lock(). It was always unlocking and relocking the advisory_locking object when it didn't have to wait, but in the meantime someone else could have changed the locking situation. Reorganized the control flow, so that it only drops the lock when it has to fail or wait. Using create_advisory_locking() upfront simplifies the code quite a bit (and fixes another race condition). APR's testprocmutex test seems happy now, at least. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25407 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
adf376c9 |
|
08-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Replaced benaphores with mutexes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25378 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0c615a01 |
|
01-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Removed old mutex implementation and renamed cutex to mutex. * Trivial adjustments of code using mutexes. Mostly removing the mutex_init() return value check. * Added mutex_lock_threads_locked(), which is called with the threads spinlock being held. The spinlock is released while waiting, of course. This function is useful in cases where the existence of the mutex object is ensured by holding the threads spinlock. * Changed the two instances in the VFS code where an IO context of another team needs to be locked to use mutex_lock_threads_locked(). Before it required a semaphore-based mutex implementation. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25283 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
503912f7 |
|
30-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fixed the case that a file to be created non-exclusively is a symlink (bug #2183). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25271 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
24280972 |
|
29-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Removed superfluous uint32 ref parameter from select() FS hook. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25268 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b1d749f8 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added an atomic.h header that provides a C++ file with a templatized 64-bit safe version of atomic_test_and_set() for pointers: atomic_pointer_test_and_set(). * The VFS is now using this function (it's not used anywhere else in the kernel this way). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25260 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
bbc25eb6 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Renamed temporary KDL variable from _cookie to _volume in the "mount" command. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25251 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f8a2f7ce |
|
25-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* attribute dirs shouldn't be locked out either; I've inverted the type check, so that it now only checks for the type that allow locking. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25168 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d81dcabe |
|
25-Apr-2008 |
Bruno G. Albuquerque <bga@bug-br.org.br> |
FS gurus, please review. - get_new_fd() now checks if we are dealing with attributes before deciding to bail out on a locked vnode. - Enabled locking in MailSettings again as it now works. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25162 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0951fcb4 |
|
24-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
vfs_create_special_node() always tried to create the node in "/". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25139 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3118b3a7 |
|
11-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added fd_ops::set_flags() hook. It's only implemented by socket FDs ATM. * Changed common_fcntl() to also work for non-vnode-based FDs. Only the operations that require a vnode do fail now. F_SETFL uses the new fd_ops::set_flags() if available, falling back to the vnode respective operation. * Changed some direct accesses to file_descriptor::u::vnode. It was safe in those cases, but might not be anymore if we ever change fd_vnode(). ftp can at least connect to servers again, now, but apparently we still have a problem with syscall restarts -- downloads fail after one second, when the timer goes off. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24917 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ac0e5c1c |
|
11-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
The fs_sync() function (or any other, for that matter) must not hold the sMountMutex lock when calling sync() on a file system. This fixes a potential deadlock (I just encountered for the first time). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24915 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9493edbe |
|
11-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Applied patch by Christian Fasshauer: * get_dir_path_and_leaf() now removes trailing slashes from the path. * This fixes bug #2016, thanks! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24913 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0fc6c437 |
|
10-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Resolved TODO: We can check for sockets, now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24906 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f8b4d83f |
|
09-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
New service function vfs_create_special_node() to create special nodes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24883 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
037f7094 |
|
09-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Cleaned up KernelExport.h completely, removed deprecated and non implemented API, uses the _PRINTFLIKE macro where appropriate. * Got rid of the "qent" structure, struct timer now contains everything we need. This makes the affected code in sem.cpp, signal.cpp, and timer.c much cleaner, and resolves a few TODOs. * Minor cleanup in vfs.cpp. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24871 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fc380199 |
|
06-Apr-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Rename vfs_stat_entry_ref() to vfs_stat_node_ref() as that's what a dev_t and ino_t combination really is. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24825 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6e36a49e |
|
05-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added _kern_create_pipe() syscall, creating a pipe as an entryless FIFO. Reimplemented pipe() to use it. * pipefs is no longer mounted. Will remove the superfluous code soon. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24823 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
717705d8 |
|
05-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
We get a reference to the node from create_special_node(), so we have to release it. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24817 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7ffafac8 |
|
05-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Reorganized the FS interface a little: - Moved most file_system_module_info hooks into separate structures. Those that operate on mounted volumes to fs_volume_ops, those operating on a vnode to fs_vnode_ops. - Got rid of the fs_volume, fs_cookie, fs_vnode typedefs. We use void* again. - Instead of a void* volume and node cookie hooks are passed a fs_volume and fs_vnode structure pointer, which contain the cookie and an ops pointer (fs_volume a few more things). - The VFS {new,publish,get,...}_vnode() functions take a fs_volume* instead of the volume ID. So does vfs_get_fs_node_from_path(). - Added type and flags arguments to publish_vnode() and the get_vnode() hook and removed the type argument from lookup() hook. Added vnode::type using formerly unused bits to store the node type. Simplified a few things in the VFS due to the now always available node type. - Added fs_volume_ops::{create,delete}_sub_vnode() and fs_vnode_ops::get_super_vnode() hooks. They are used to support file system layers, e.g. allowing to extend an FS not supporting BeOS attribute with attribute support. Needs some more work in the VFS. - Added fs_vnode_ops::create_special_node() hook for creating special nodes (e.g. FIFOs). * Adjusted the built-in file systems and BFS according to the interface changes. Removed all other FSs from the image for the time being. We'll see whether further API changes are necessary before porting them. * Adjusted the bfs_shell accordingly. * Implemented create_special_node() in rootfs to support special nodes. * Added support for FIFOs: - Added syscall _kern_create_fifo() (used by mkfifo()), which creates a special node (type S_IFIFO) in the respective file system. - When a special node is published the VFS creates a respective sub node. Currently only FIFOs are supported. - Added a little support for FIFO subnodes by using functionality from the pipefs. - Added mkfifo to the image. It can create FIFOs in the rootfs, but the FIFOs aren't really usable ATM, since they still work like pipes, i.e. readers and writers need to have them open at the same time. * Some smaller changes in the VFS: - Made the *_CALL macros nicer to use (vargs). - Refactored FS entry lookup into new function lookup_dir_entry(). - create_vnode() no longer just calls the FS create() hook. First it looks up the entry and uses open_vnode(), if it already exists. This is necessary for two reasons: 1) The FS might not support create() while still allowing to open() entries. 2) When the FS has other layers on to of it (or the respective node) it might not be responsible for opening the node. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24816 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
efb965d5 |
|
05-Apr-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Introduce vfs_stat_entry_ref() that allows to stat a vnode based on a dev_t and ino_t instead of a path. Supposed to work with node monitoring messages. Took the name from vfs_entry_ref_to_path() that takes the same arguments, but suggestions for a better name are welcome. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24813 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
de731008 |
|
01-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Also check whether the supplied vnode is a directory, if there's only one path component. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24736 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0cc0b6fc |
|
01-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Fixed resolution of symlinks path components, broken since r24721/r24722. After resolving a symlink we weren't updating the local type variable to the type of the link target, so that the directory check in the next iteration would always fail. * Added TODO. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24735 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b987779d |
|
01-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Revised my previous patch as outlined in the previous one: * No longer checks for the path delimiter twice. * Now also checks if the first part of the path is a directory. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24722 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6800e4f8 |
|
01-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Reverted r24720, and at least fixed the problematic return code after the first loop - the vnode passed in would still need to be checked, though. Eventually, it would be nice to move the check to the top, though, so that we don't need to search for the patch delimiter twice. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24721 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b48c7f23 |
|
01-Apr-2008 |
Bruno G. Albuquerque <bga@bug-br.org.br> |
- vnode_path_to_vnode() now returns B_NOT_A_DIRECTORY instead of B_NOT_ALLOWED as expected by POSIX programs. This allowed be to compile Haiku under itself without any hacks at all, so I guess this means that now we are officially self-hosting! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24720 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
360be1fc |
|
29-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Implemented support for chroot: - Added a "root" vnode to the io_context. It is used for resolving paths and converting nodes to paths instead of sRoot. Some more passing around of io_context structures was necessary. - Introduced a new lock sIOContextRootLock to protect io_context::root. The current uses of io_context::io_mutex (put_vnode(), remove_vnode() while holding it) looked too suspicious to use that mutex in vnode_path_to_vnode(). - Added _kern_change_root() syscall and chroot() libroot function. - Added chroot coreutils program to the image. Funnily it seems to be much easier to set up a little jail than under Linux (just copy bash and libroot.so into respective subdirs; mount another pipefs if you want pipe support). With Haiku allowing direct access to directories via inode IDs jailing is obviously not very secure at the moment. - Added /var/empty to the image. It will be the chroot target for ssh. * Changed vfs.cpp:get_cwd() so that the io_context::io_mutex is no longer held when calling dir_vnode_to_path(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24673 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8c117a6d |
|
29-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added function vfs_read_stat() that also allows for stat()ing files in the user IO context from within the kernel. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24667 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9e79133f |
|
27-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Reverted r22315 as far as free_vnode() is concerned: removing the vnode from the hash before putting it caused all sorts of problems. * For example, BFS would trim its preallocations when the vnode is put; if someone would read that same vnode after it had been removed, but before BFS could trim it, it would read the old vnode which still seemed to own the blocks which would subsequently be freed. * This fixes bug #1914, and should also fix bug #1956. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24607 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e9d948ce |
|
18-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* entry_ref_to_vnode() now gets a "traverse" argument, so that it is able to resolve symlinks. * file_open_entry_ref() now evaluates the openMode and passes the correct "traverse" argument to entry_ref_to_vnode(). This fixes bug #1932 (symlink refs wouldn't be resolved). * dir_open_entry_ref() now always resolves symlinks, all other uses of entry_ref_to_vnode() keep their previous behaviour, though. * Fixed warnings; since Ingo's header changes, NULL now causes a warning when it is used as int. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24442 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1b32947d |
|
17-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Aligned the semantics of the read_symlink() FS module hook with the readlink() function. It is no longer required to null-terminate the string, shall not fail, if the buffer is too small, and shall return the length of the string actually written into the buffer. * Adjusted rootfs, devfs, and bfs accordingly. Also adjusted their read_stat() hooks to return the correct symlink length in st_size. * Our readlink() does now comply to the standard (and BeOS). Additionally if the buffer is big enough it is nice to non-conforming apps and null-terminates it. * BSymLink::ReadLink() explicitly null-terminates the string now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24425 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f542307a |
|
09-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
We didn't copy the close-on-exec flags on fork(), thus always leaving all FDs in a fork()+exec()ed child open. Makes Perl test t/run/cloexec.t pass. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24336 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3f89bce4 |
|
09-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* The module code now uses find_directory() and no hard-coded paths anymore. * It now also supports the common directory path. * search_module() checked the module paths in the wrong order, ie. it preferred modules in the system directory over the user directory. * Clarified comment in vfs_get_module_path(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24323 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fa28330b |
|
09-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Explained under which circumstances vnode_path_to_vnode() will clobber the buffer of the provided "path" argument. * Applied patch by Vasilis to fix some warnings when build on Linux (missing const on certain functions). We should probably fix the original {add|remove}_debugger_command() functions in Haiku as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24322 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
daa6f66e |
|
04-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24236 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0c415f62 |
|
27-Feb-2008 |
Axel Dörfler <axeld@pinc-software.de> |
"leaf" may be NULL, fixed crashing bug I introduced with vfs_entry_ref_to_path(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24154 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4f26630d |
|
27-Feb-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Factored a vfs_entry_ref_to_path() out of _user_entry_ref_to_path() and made it public (within the kernel). * _user_entry_ref_to_path() is now using that function. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24151 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
849246ba |
|
19-Feb-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Improved (and tested) the advisory file locking mechanism a bit: * our flock::l_len was inclusive, while it's exclusive (the last byte locked is (l_start - 1 + l_len) not just (l_start + l_len). * F_UNLCK removes all locks of the calling process that are within the specified region - existing locks might also cut or divided. * Apparently, a single team can lock the same region as often as it wants. * advisory_locking is now using a DoublyLinkedList instead of its C counterpart. * advisory_lock now has start + end fields, instead of offset + len, it's handier this way. * This fixes bug #1791. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24020 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4048494c |
|
17-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: * Implemented automatic syscall restarts: - A syscall can indicate that it has been interrupted and can be restarted by setting a respective bit in thread::flags. It can store parameters it wants to be preserved for the restart in thread::syscall_restart::parameters. Another thread::flags bit indicates whether it has been restarted. - handle_signals() clears the restart flag, if the handled signal has a handler function installed and SA_RESTART is not set. Another thread flag (THREAD_FLAGS_DONT_RESTART_SYSCALL) can prevent syscalls from being restarted, even if they could be (not used yet, but we might want to use it in resume_thread(), so that we stay behaviorally compatible with BeOS). - The architecture specific syscall handler restarts the syscall, if the restart flag is set. Implemented for x86 only. - Added some support functions in the private <syscall_restart.h> to simplify the syscall restart code in the syscalls. - Adjusted all syscalls that can potentially be restarted accordingly. - _user_ioctl() sets new thread flag THREAD_FLAGS_IOCTL_SYSCALL while calling the underlying FS's/driver's hook, so that syscall restarts can also be supported there. * thread_at_kernel_exit() invokes handle_signals() in a loop now, as long as the latter indicates that the thread shall be suspended, so that after waking up signals received in the meantime will be handled before the thread returns to userland. Adjusted handle_signals() accordingly -- when encountering a suspending signal we don't check for further signals. * Fixed sigsuspend(): Suspending the thread and rescheduling doesn't result in the correct behavior. Instead we employ a temporary condition variable and interruptably wait on it. The POSIX test suite test passes, now. * Made the switch_sem[_etc]() behavior on interruption consistent. Depending on when the signal arrived (before the call or when already waiting) the first semaphore would or wouldn't be released. Now we consistently release it. * Refactored _user_{read,write}[v]() syscalls. Use a common function for either pair. The iovec version doesn't fail anymore, if anything could be read/written at all. It also checks whether a complete vector could be read/written, so that we won't skip data, if the underlying FS/driver couldn't read/write more ATM. * Some refactoring in the x86 syscall handler: The int 99 and sysenter handlers use a common subroutine to avoid code duplication. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23983 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4af88776 |
|
17-Feb-2008 |
Marcus Overhagen <marcusoverhagen@gmail.com> |
build fix for r23929 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23982 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9ae93dcd |
|
17-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
_user_normalize_path() was broken for symlinks in absolute paths. Fixes #1778. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23969 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2c986936 |
|
07-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added new syscall _kern_normalize_path() to normalize a path. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23929 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a32a4683 |
|
03-Feb-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Implemented flock() semantics to the advisory locking backend. Not tested (must also compare to BSD; I've looked at their sources, but I might have missed something). * Added sys/file.h and the flock() system call. * common_fcntl() could forget to put back the file descriptor on some error conditions (I guess we should introduce and use a DescriptorGetter class). * Cleaned up fcntl.h, moved the BSD extensions S_IREAD and S_IWRITE to sys/stat.h where they belong, and added the missing S_IEXEC to them. * Added some more comments. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23836 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
731262c6 |
|
21-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Rethought fs_sync(): since we no longer deadlock when calling vm_cache_write_modified() here anymore since quite some time, it actually doesn't make any sense to call the file system's "fsync" method here. This should make syncing all file systems much faster when many vnodes are in use. * If a file system doesn't use the file cache, it can still just sync everything it needs to in its "sync" method. * Added a TODO item on how to improve sync speed further, if necessary. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23679 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b9074efc |
|
16-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed the "vnodes" KDL command when called without any arguments. * Fixed the usage text of the "help" KDL command. * Made the "ambiguous command" warning shorter, so that it will still fit in the exception buffer. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23565 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
dd80f32a |
|
16-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added support for the "--help" argument for all VFS debugger commands. * Added some temporary variables to the commands. * Use parse_expression() where appropriate. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23556 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2eceeaba |
|
12-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Fix comment. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23466 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0fc976d9 |
|
12-Jan-2008 |
Ithamar R. Adema <ithamar.adema@team-embedded.nl> |
Fix problem with CLOEXEC also being handled on fork(). For details on expected (BeOS) behaviour, see http://www.freelists.org/archives/openbeos/12-2001/msg00280.html git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23456 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f3ecf93d |
|
12-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Added the cookie/private_node fields to the mounts/vnodes list in KDL. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23455 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a52c1759 |
|
12-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed two bugs in the vnode disconnecting code found by bonefish+mmlr: * vfs_disconnect_vnode() did not put away its vnode reference. * disconnect_mount_or_vnode_fds() did always throw the current working directory of all apps on the same mount away, even if only a specific vnode should have been disconnected. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23445 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
34b3b26b |
|
10-Jan-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged branch haiku/branches/developer/bonefish/optimization revision 23139 into trunk, with roughly the following changes (for details svn log the branch): * The int 99 syscall handler is now fully in assembly. * Added a sysenter/sysexit handler and use it on Pentiums that support it (via commpage). * Got rid of i386_handle_trap(). A bit of functionality was moved into the assembly handler which now uses a jump table to call C functions handling the respective interrupt. * Some optimizations to get user debugger support code out of the interrupt handling path. * Introduced a thread::flags fields which allows to skip handling of rare events (signals, user debug enabling/disabling) on the common interrupt handling path. * Got rid of the explicit iframe stack. The iframes can still be retrieved by iterating through the stack frames. * Made the commpage an architecture independent feature. It's used for the real time data stuff (instead of creating a separate area). * The x86 CPU modules can now provide processor optimized versions for common functions (currently memcpy() only). They are used in the kernel and are provided to the userland via commpage entries. * Introduced build system feature allowing easy use of C structure member offsets in assembly code. Changes after merging: * Fixed merge conflict in src/system/kernel/arch/x86/arch_debug.cpp (caused by refactoring and introduction of "call" debugger command). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23370 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4accd841 |
|
06-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed a big bug in common_file_io_vec_pages(): vecOffset was not correctly set when the first chunk of the file could be read in directly, causing it to read data to a wrong place in the buffer. * Reading in the first chunk directly would have also only worked if vecIndex and vecOffset was 0 when calling the function. * Applied the fs_shell changes in file_map to the kernel version as well (the constructor already worked correctly, though). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23265 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fb431b44 |
|
13-Nov-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* vfs_unmount() can now safely be called from the kernel (fs_unmount() still tried to access the uninitialized vnode in that case). * That means that it's now safe to remove a mounted CD from the drive, it will then be unmounted automatically. * Added a check for partition::Device() - even though Ingo tells me it's impossible, it was NULL once. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22922 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6e122bd9 |
|
12-Nov-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: Missed those changes in the previous commit: * Added vfs_unmount(), which allows unmounting by dev_t (used by the DDM). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22910 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3d268eda |
|
10-Nov-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Extracted file_map API out of the file cache - it's now an optional service that can be used by file systems. * Changed the way the file cache works: instead of reading/writing to the underlying device directly, it can now be used for any data source, ie. also network file systems. * As a result, the former pages_io() moved to the VFS layer, and can now be called by a file system via {read|write}_file_io_vec_pages() (naming suggestions are always welcomed :-)). It now gets an FD, and uses that to communicate with the device (via its fs_{read|write}_pages() hooks). * The file_cache_{read|write}() functions must now be called without holding an I/O relevant file system lock. That allows the file cache to prepare the pages without colliding with the page writer, IOW the "mayBlock" flag can go into the attic again (yay!). * This also results in a much better performance when the system does I/O and is low on memory, as the page writer can now finally write back some pages, and that even without maxing out the CPU :) * The API changes put slightly more burden on the fs_{read|write}_pages() hooks, but in combination with the file_map it's still pretty straight forward. It just will have to dispatch the call to the underlying device directly, usually it will just call its fs_{read|write}_pages() hooks via the above mentioned calls. * Ported BFS and FAT to the new API, the latter has not been tested, though. * Also ported the API changes to the fs_shell. I also completely removed its file cache level page handling - the downside is that device access is no longer cached (ie. depends on the host OS now), the upside is that the code is greatly simplified. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22886 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
53715fe0 |
|
01-Nov-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Got rid of the B_PARTITION_DESCENDANT_BUSY flag. * Added CheckAndMarkBusy() and UnmarkBusy() methods to KPartition. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22801 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8354dac7 |
|
01-Nov-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Folded KPhysicalPartition into KPartition. Removed the notion of shadow partitions from the disk device manager. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22800 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
32788795 |
|
01-Nov-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Moved partition scanning back to KDiskDeviceManager. ATM only synchronous scanning is supported. * Removed the disk device job support from the disk device manager. * K{Disk,File,Partitioning}System: - Remove querying and validation methods. - Commented out the modification methods until their fate is decided. * Removed obsolete _user_get_partitionable_spaces(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22799 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
45ae0aa1 |
|
23-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
It's not a good idea to write back large files while keeping the vnode busy. The low memory handler now has two passes which should help there; however, it might also accidently remove recently used vnodes, too. We could mark the clean ones in some way if that turns out to be a problem. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22678 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0710d59c |
|
08-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Added a "canWait" argument to vfs_get_vnode() - you can use this to ignore busy vnodes. * dir_create_entry_ref() used get_vnode() incorrectly (and could therefore potentially prevent a file system from doing proper locking when called from the kernel). * The vnode_store now uses this for its acquire_unreferenced_ref() implementation (and therefore for the page writer). * read_into_cache() and write_to_cache() were still marked inline. * The system will now wait 10 secs for a busy vnode before returning an error. * It will also no longer panic in that case. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22485 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0b7582a3 |
|
07-Oct-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Some types of files cannot be seeked and we need to fail in those cases. We actually need to fail for sockets, too, but until I'm mistaken, we can't identify them in the VFS. Fixes bug #1539. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22480 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
80f54692 |
|
06-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* struct vnode is an opaque type now, removed void* where it was used incorrectly. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22461 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
57026319 |
|
05-Oct-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Reviewed checking of empty paths and fixed some occurrences. Thanks to mjw for the hint. Fixes bug #1516. * Changed _{kern,user}_create_symlink() to no longer check the supplied link string. BeOS seems to do that, but this is not standard conforming. The previous implementation even used the path processed by check_path(), which would potentially have appended a ".". * Some style cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22451 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3e9513aa |
|
03-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* fs_{write|read}_pages() now has an additional argument "mayBlock". * the page writer don't allow to block, while all other writers do. This fixes bug #1509. The reason the page writer needs this is because it marks several pages from different caches as busy. * Fixed a warning about ASSERT being defined already in BFS, since util/DoublyLinkedList.h now includes debug.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22434 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
636bfc08 |
|
02-Oct-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed fs/vfs_select.cpp to wait_for_objects.cpp and got rid of vfs_select.h, respectively moved most of it into the new kernel private header wait_for_objects.h. * Added new experimental API functions wait_for_objects[_etc](). They work pretty much like poll(), but also for semaphores, ports, and threads. * Removed the "ref" parameter from notify_select_events() and the select_sync_pool functions as well as from fd_ops::fd_[de]select(). It is no longer needed. The FS interface select() hook still has it, though -- the VFS will always pass 0. * de]select_fd() take a select_info* instead of a select_sync* + ref pair, now. Added respective functions for semaphores, ports, and threads. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22416 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
66c03dc3 |
|
30-Sep-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* fd.c -> fd.cpp * Reworked the select support: - The io_context additionally stores a table of lists of select_infos, which enables it to deselect events of a pending select() when closing a FD. This prevents a race condition potentially causing a write to stale memory. - The opaque selectsync* passed to FSs is now actually a select_info*. This was necessary, since the FDs deselect() hook (unlike the select() hook) doesn't take a "ref" argument and deselecting a single info (e.g. caused by a premature close()) was not possible. The select() hook's "ref" argument has become superfluous. - It should now be relatively easy to implement a poll_on_steroids() that can also wait for objects other than FDs (e.g. semaphores, ports, threads etc.). * Set/reset the signal mask in common_select(). This makes pselect() work as required. * Reorganized vfs_resize_fd_table(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22391 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3392e9bc |
|
29-Sep-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Added some more debug output. * Cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22375 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6d4aea47 |
|
25-Sep-2007 |
Axel Dörfler <axeld@pinc-software.de> |
bonefish+axeld: * Removed the vm_cache/vm_store ref_count duality that besides being a bit ugly also created the page dameon cache retrieval problem: now, only areas (and cache consumers) retrieve a reference to the store (and therefore, the vnode). The page daemon doesn't need to care about this at all anymore, and the pseudo references of the vm_cache could be removed again. * Rearranged deletion of vnodes such that its ID can be reused directly after fs_remove_vnode() has been called. * vm_page_allocate_page() no longer panics when it runs out of pages, but just waits for new pages to become available using the new sFreeCondition condition variable - to make sure this happens in an acceptable time frame, it'll trigger a run of the low memory handlers. * Implemented a page_thief() that steals inactive pages from caches and puts them into the free queue. It runs as a low memory handler. * The file cache now sets the usage count on the pages it inserts into the cache (needs some rework though, cache_io() doesn't do it yet). * Instead of panicking, the kernel will currently dead lock in low memory situations, since BFS does a bit too much in bfs_release_vnode(). * Some minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22315 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8687956a |
|
09-Sep-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added a clarifying comment to free_vnode() and prevented the vnode reference count to drop below 0 there. * Added TODO describing a serious race condition between free_vnode() and the page daemon. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22209 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
62454aae |
|
08-Sep-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fixed get_mount(). It must also acquire the vnode lock before trying to increment the root node vnode reference count. Otherwise it could race with fs_unmount(). Fixes bug #1438. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22203 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
43ab7500 |
|
08-Sep-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Some cleanup. Fixed gcc 4 warning. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22202 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d1dc70fa |
|
05-Aug-2007 |
Marcus Overhagen <marcusoverhagen@gmail.com> |
FD_CLOEXEC is a flag, other bits may be set git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21829 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
58f6e8e5 |
|
17-Jul-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Merged vm_cache_ref and vm_cache to a single structure (Axel & Ingo). * Renamed vm_cache.c to vm_cache.cpp git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21642 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
bd187793 |
|
14-Jul-2007 |
Axel Dörfler <axeld@pinc-software.de> |
remove_vnode() will now return an error code if the vnode to be removed did not exist. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21614 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
25f46ea4 |
|
30-Jun-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Reserving areas never put down their reference of their address space when removed in several cases. * vfs_get_vnode_cache() now always gives out a reference to the cache it returns; if it needs to allocate a new one, the vnode owns one reference, and the caller another. * therefore, file_cache_create() now owns a reference to its vm_cache_ref, and frees it in file_cache_delete(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21533 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
245aecda |
|
21-Jun-2007 |
Axel Dörfler <axeld@pinc-software.de> |
Got rid of vnode_id and mount_id, replaced with ino_t and dev_t. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21485 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f415aa28 |
|
28-May-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* create_vnode() now panicks when it could not find the freshly created vnode in the vnode hash; that's a bug in the FS that shouldn't be ignored that way. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21262 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b5f602a7 |
|
27-May-2007 |
Jérôme Duval <korli@users.berlios.de> |
added a missing newline, dunno why this message is displayed :) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21250 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1e768ed1 |
|
02-Apr-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
get_vnode_name(): * read_dir() is supposed to return B_OK and and a count of 0 when reaching the end of the directory. In case the node in question could not be found, we were looping infinitely. * free_dir_cookie() was not invoked. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20519 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6376aa3f |
|
23-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* The close-on-exit bitmap vfs_new_io_context() created was a byte short, if the FD table size wasn't a multiple of 8. * vfs_resize_fd_table() didn't seem to know at all about the close-on-exit bitmap. The pointer in the io_context would point to free()d memory afterwards. This explains the sporadically closed stdin/out/err descriptors in programs started from Tracker and Deskbar. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20413 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
cf4ccd65 |
|
04-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Renamed the FS interface hook read_link() to read_symlink(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20330 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
12d359b8 |
|
04-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Removed write_link from the FS module interface. Adjusted all FS add-ons accordingly and removed the syscall. * Removed send_notification(). * Reimplemented notify_listener(). It used the unimplemented send_notification(). Now it has a chance to work. Note that notify_listener() is obsolete. I would already have removed it, if there weren't lots of FS implementations still using it (Hint!). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20329 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
348be5b5 |
|
02-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced the new static lock sVnodeCoveredByMutex to guard the vnode::covered_by fields. Together with sMountOpLock it allows write access, either lock alone suffices for read access. Before sMountOpLock had to be acquired for read (and write) access, which meant that while mounting/unmounting a FS path resolution would have to wait. In case of the UserlandFS this would even cause a deadlock while mounting if the client tried to resolve the path of the device to be mounted (e.g. by opening it). * Added a clarifying comment about read access to the fs_mount::covers_vnode/root_vnode field and removed locking in resolve_volume_root_to_mount_point() which was not necessary for explained reasons. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20308 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2f742879 |
|
02-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Changed get_vnode_name() to take a dirent* parameter instead of the name (saves copying the name, if that has to be done anyway) and added a wrapper version with the old interface. * dir_vnode_to_path() was broken for file systems that didn't support the get_vnode_name() hook. It resolved the mount point too early, so that it was searching the mount point and not the FS root dir for the node. It uses the get_vnode_name() function now (before resolving the mount point). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20305 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9481e62b |
|
01-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
is_vnode_removed() is now known as get_vnode_removed() and returns its answer through a reference parameter. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20297 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6d366784 |
|
28-Feb-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Be nicer to FSs and fill in the known part of the fs_info *after* the FS had its go. BeOS does the same. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20262 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
223bba10 |
|
28-Feb-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Resurrected is_vnode_removed(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20256 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c926cb8d |
|
19-Feb-2007 |
François Revol <revol@free.fr> |
Return sensible errors instead of -1. Added some TODO comments. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20166 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c8d3c6f4 |
|
19-Feb-2007 |
François Revol <revol@free.fr> |
Implemented get/setrlimit(RLIMIT_NOVMON). Note the kernel calls don't set errno... but they're called by user versions. Might want to split them if needed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20165 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
793f5422 |
|
30-Aug-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Added a comment about the outcome of a potential problem. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18717 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c40fe37f |
|
30-Aug-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* Reverted the changes r17693 made to vfs_get_vnode_cache(); instead, vm_create_vnode_cache() will now grab a reference to the vnode as well if successful. This way, vfs_get_vnode_cache() now actually works how it should: it will now always grab a reference to the cache and its underlying vnode. This removes an extra reference to the vnode (and vm_cache) that got ignored before and prevented volumes to be unmounted (or file caches to be removed). Thanks to Korli for pointing this out. * file_cache_create() is now aware of that extra vnode reference and releases it; unmounting volumes is now working again as it should. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18716 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
355efe3e |
|
24-Aug-2006 |
Jérôme Duval <korli@users.berlios.de> |
improve debug command vnode_cache: it now accepts a device arg git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18618 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0ba03704 |
|
21-Jun-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Use B_MAX_SYMLINKS instead of SYMLINKS_MAX (which also fixes the build, btw). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17900 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8265e121 |
|
02-Jun-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Implemented mandatory file locking, BeOS style. BNode::Lock() and BNode::Unlock() are now working as expected. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17697 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
acac7c68 |
|
01-Jun-2006 |
Axel Dörfler <axeld@pinc-software.de> |
_vm_map_file() did in fact not work correctly, but the main problem was vfs_get_vnode_cache() which did not acquire an extra reference to the cache_ref when the cache had to be created. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17693 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
20914efd |
|
25-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Made _user_open_entry_ref() a bit more relaxed and return B_BAD_VALUE on some obvious errors. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17586 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4b25b1b9 |
|
19-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
common_lock_node() now pretends to be successful - this should fix Vision not being able to store its settings for now (bug #589). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17505 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3cb039ff |
|
05-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
When you try to mount a file image, BFS now only sees the normalized path instead of the one supplied to fs_mount() (but not the /dev/disk/virtual/... entry, as that wouldn't be that clear to the user). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17335 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
65bd831c |
|
05-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* KDiskDeviceManager::_ScanPartition() can now run synchronously (and execute the scan job in the calling thread). * KDiskDeviceManager::InitialDeviceScan() now runs synchronously, so that get_boot_partitions() doesn't need to do this ugly wait hack. * KDiskDeviceManager::CreateFileDevice() can now run synchronously as well, which fixes a deadlock in fs_mount() - note, mounting file devices still doesn't work, though as Haiku's BFS doesn't allow this right now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17334 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4827dbe4 |
|
18-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed a bug in the VFS that could cause BFS to corrupt an inode: dir_remove() did not normalize the path, and thus, could forward a "." as name for the removed directory - which BFS didn't catch because it assumed our VFS would work correctly... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17165 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a88c592f |
|
18-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Instead of ending up in an endless loop, fs_sync() will now bail out in case get_vnode() fails. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17162 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fde87a10 |
|
18-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Instead of waiting forever, get_vnode() will now fail after 3 seconds if the vnode is not becoming unbusy (right now it even panics, but that can be removed later on). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17161 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b2536cb5 |
|
16-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed bug #483: * vfs_get_fs_node_from_path() now also work for absolute paths again (but still for relative ones from the volume root) - it just tests if the mount IDs fit, so it only returns successful if the path really is on the desired mount. * the Disk Device Manager publish functions now call devfs_publish_*() correctly (by omitting the "/dev/" mount point). * devfs_publish_partition() now accepts absolute device paths but relative partition paths. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17138 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9a11448f |
|
13-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
vfs_get_fs_node_from_path() didn't work correctly and ignored the mount_id (ie. it only worked for absolute paths, but it shouldn't work for those at all). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17127 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
97e06971 |
|
12-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Added a "reenter" parameter to the {read|write}_pages() functions to give file systems a chance to know if they have locked already. This fixes a locking problem in BFS where one thread tried to acquire two read locks (where someone else trying to acquire a write lock would have caused a dead lock). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17108 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
675c19c9 |
|
10-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* fs_sync() and free_vnode() now use the file system's fsync() hook to write back changes made to a file instead of directly using vm_cache_write_modified() - besides making the file system more independent from the file cache, this also works around a possible dead lock (that is to be fixed in a later commit). * fs_sync() no longer uses vnodes from the mount's vnode list directly to write back the changes made to them, but gets them via ID instead - this makes sure the vnode is in a valid state and fixes a race condition with free_vnode(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17059 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
606e0d36 |
|
27-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* Factored out the vnode disconnection code from fs_unmount() to a separate function, and added a vfs_disconnect_vnode() for other kernel components. * devfs_unpublish_device() can now optionally make use of this call. * Fixed the type check of devfs' unpublish_node(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16907 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
33dd8550 |
|
14-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16784 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
abb84c7d |
|
08-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Removing the nodes from the unused list in fs_unmount() had the side effect that the root vnode was tried to be removed as well (which resulted in a crash). Since playing with the root node reference count is a bad idea anyway and opens a big race condition (with regards to the unused list), we no longer do that now, until it's safe. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16665 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f951ca0e |
|
08-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed a couple of bugs: * fs_unmount() freed vnodes, but didn't remove them from the unused list if needed. * vfs_get_module_path() could put a vnode twice under several situations. * vnode_path_to_vnode() now always puts the dir vnode, even if the provided path is NULL. Documented the fact that it does eat the ref, too. * Added a to-do item in vfs_get_vnode_cache() about a possible problem. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16662 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
311bcf39 |
|
07-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed a possible deadlock I've introduced earlier (since create_sem() calls vfs_free_unused_vnodes()); the vnode mutex is now hold for much shorter times only: * Rewrote advisory_locking creation/maintenance to hold the vnode mutex only for very short times. * the vnode mutex is no longer held during file cache construction; instead, the vnode is marked busy. * Implemented an (incorrect for now) get_advisory_lock() git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16635 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9f6376a0 |
|
06-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* get_vnode() did not decrease the sUnusedVnodes counter when taking one node of that list. * Added a vfs_free_unused_vnodes() function that calls the low memory handler directly. * create_sem_etc() now calls the above function in case there are no semaphores available anymore; this usually frees up to 2 semaphores per node (one from the cache if there is a file cache attached, and eventually one from the file system). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16610 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d98d96e9 |
|
06-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Added debugger command that dumps info about the vnode usage. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16607 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0254f09d |
|
05-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
It's not so problematic if a busy vnode was released; what is problematic is if that was the last ref. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16590 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0d4c16e0 |
|
05-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* Reduced the stack usage of most of the I/O paths - there were several places that put one or more full paths on the stack before, which could cause some problems under certain conditions. * Cleaned up KPath, ie. use size_t instead of int32 where appropriate, added license. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16585 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
bb674499 |
|
03-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* Finally implemented B_WATCH_MOUNT, ie. Tracker now shows newly mounted volumes (mounting still only works from the Terminal). * Shuffled functions in node_monitor.cpp around to clearly differentiate between private, private kernel, and public kernel functions. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16575 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3ea7d1fc |
|
27-Feb-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Minor cleanup, now returns B_NAME_TOO_LONG if the query string or mount parameters were longer than 64k. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16527 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5a2ad00c |
|
20-Feb-2006 |
Jérôme Duval <korli@users.berlios.de> |
fix a TODO in _user_mount : added an argsLength parameter git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16480 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
979aeaf7 |
|
25-Jan-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed bug #97: * BEntry::Remove() now uses _kern_remove_dir() for directories. * Added fd parameter to _kern_remove_dir(). * Fixed LibBeAdapter's _kern_unlink() to only work on files, and added _kern_remove_dir() for directories. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16078 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7817211a |
|
16-Jan-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Allow only root to look at other team's file descriptors. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15992 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0e382a46 |
|
16-Jan-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Implemented a syscall to get information about the open file descriptors of all teams. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15991 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ddb7d0b6 |
|
15-Jan-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Implemented force unmounting - by passing the "-f" option to "unmount" you can now safely unmount volumes that are still in use by some applications. Minor fixes to the FD disconnection implementation: * put_fd() checked the condition for being able to disconnect a descriptor incorrectly (causing the FD to never be disconnected). * remove_fd() would hand out disconnected descriptors (but should have returned NULL for them). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15952 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
16cfe613 |
|
21-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed vfs_lookup_vnode() - it's not called with the mutex already locked anymore. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15647 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ea2cd27e |
|
21-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed the strange vm_cache_ref reference count mechanism: now, a fresh vm_cache_ref starts with a reference count of 1. When acquiring a vm_cache, you no longer need to worry if that should go through the vm_store, or not; as it now always does. * map_backing_store() no longer needs to play with the vm_cache_ref references. * that simplified some code. * vfs_get_vnode_cache() now grabs a reference to the cache, if successful. * better balanced vnode ownership on vnode_store creation (vnode_store released the vnode before if its creation failed). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15641 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
89f5f72a |
|
16-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
* Added debug output to vm_low_memory.cpp. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15568 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d0d37bdf |
|
16-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
* vfs_init() is now called later in the startup sequence - since no core kernel service depends on it, it doesn't make any sense to call it that early in the game. * The VFS now has a low memory handler for vnodes as well. If there is enough memory left, it won't free any vnodes anymore. * Potential crashing bug fix: some functions did not check if the FD passed in belonged to the right type; they just assumed it had a valid vnode, but it could have had a mount structure associated as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15566 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
04cd47db |
|
10-Nov-2005 |
Axel Dörfler <axeld@pinc-software.de> |
common_access() now follows the same logic as traversing paths: if the file system doesn't export the fs_access() function, it assumes access is granted. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14816 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7121425e |
|
20-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Turns out we could remove a mount point... Under BeOS remove_vnode() is failing in this case, which looks like a good idea to imitate. Also, pipefs/rootfs didn't handle that case - they even removed the entry before calling remove_vnode() - they now behave correctly. And also BFS now returns the actual error code received from remove_vnode() instead of B_ERROR. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14456 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2db3fced |
|
17-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Moved vfs_bootstrap_file_systems() and vfs_mount_boot_file_system() out of vfs.cpp and into its own file vfs_boot.cpp. Added basic support for booting from CD - it doesn't give CDs a higher priority, so you could end up booting from HD when you didn't explicetly select "CD-ROM" in the boot loader. Eventually, it should only boot from HD in this case, if booting from CD failed (because of a missing boot partition or whatever). fs_mount(), _kern_mount(), and _user_mount() will now return the dev_t of the mounted device, and not just B_OK. Maybe we should have fs_unmount() work on a dev_t instead of a path as well... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14403 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9a63d903 |
|
06-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Added kernel private VFS functions vfs_entry_ref_to_vnode() and vfs_vnode_to_node_ref(). Minor cleanup of vfs.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14314 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
681779f1 |
|
06-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Our close-on-exec flag handling was broken: it's supposed to be specified per slot, not per file descriptor (a descriptor can be shared among several slots). There is now a second table in the io_context structure that contains that information in a bitmap. There are now two new (private) functions to control the close-on-exec flag, fd_close_on_exec(), and fd_set_close_on_exec(). F_DUPFD, dup(), and dup2() are supposed to clear the close-on-exec flag on the duplicated slot - this fixes bug #57 (no output after a redirect of a shell builtin). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14313 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1670b8f5 |
|
06-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
num_used_fds counting was broken for dup2() and vfs_new_io_context() when it was used with a parent context. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14311 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e8d4a05d |
|
06-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed the "iocontext" command to "io_context" to match the structure name. It now also accepts a team ID and will then dump its io_context. Accidently mixed used/max FD counter. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14310 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
333735e8 |
|
05-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Added a new debugger command "iocontext" that prints out info about the kernel's I/O context (or a specified one) including its FDs. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14304 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f10cba9a |
|
22-Sep-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Changed get_mount() to return a status code instead of just the mount or NULL. Some fields of fs_mount were not properly initialized when FS's mount function was called, and therefore, could let get_mount() return a mount structure that was not yet read for public consumption (this should fix bug #51). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14223 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
47a54bea |
|
28-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Rootfs now starts with 1 for the first inode ID. Instead of -1, vnode_path_to_vnode() now returns the ID of the starting vnode when it doesn't need to traverse the path at all. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14081 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7b285866 |
|
25-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed hash functions: when the key was lower than 0 (could happen with entry_refs and node_refs passed in) they returned an invalid index (larger than range). Fixed rootfs compilation with tracing turned on. Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14065 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e0481f92 |
|
21-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Now marks a partition unmounted on unmount - that allows a volume to be remounted as often as you like. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14036 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5b14757a |
|
20-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
We now have a consistent scheme what the file system should do with its root node: like in BeOS, it *must* own the root node (ie. via publish_vnode()), unlike in BeOS, it must also drop that reference on unmount (symmetrical behaviour definitely makes more sense to me than the Be way). Since all existing file systems for Haiku behaved differently, I brought them in line (only pipefs already adhered to that new standard for some reason, rootfs did only released the node, devfs did nothing - despite it's probably not really useful to be able to unmount them). fs_mount() will now panic if a file system does not do this correctly (useful for file system developing). Unmounting is now theoretically working again: when trying to unmount a BFS volume, the kernel crashes in the block cache destruction... (but that's work for tomorrow). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14017 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e8e4accd |
|
18-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Add some useful debugger commands to the VFS layer for dumping a vnode, an fs_mount, and the mounts/vnodes list. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13971 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7964c56d |
|
09-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Added vfs_get_cwd() call to get the mount_id and vnode_id of the current working directory (instead of the full path). Cleanup of some remaining "int" status variables (where it should have been a "status_t"). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13924 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
eab435cd |
|
05-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
vfs_get_vnode_cache() now only allocates a new cache if requested: this prevents the system to allocate caches for files that don't use or have a file cache (ie. only those can be mmap()ed!). Therefore, cache_prefetch() no longer crashes when trying to prefetch files without a file cache. read_into_cache() no longer does anything if the requested size is 0. Fixed a bug in cache_prefetch_vnode(): if the cache couldn't be retrieved, it put the vnode, but didn't own it (the caller does). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13904 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
95839f5c |
|
03-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
The file cache now has another init method that is called after the boot device becomes available. Currently, it opens the "launch_speedup" module (if available), later it should consult a settings file for what to do. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13894 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c50cfe23 |
|
02-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed crashing bug in remove_vnode(): it freed the vnode, but it didn't remove it from the hash, and thus, left a dead pointer around. free_vnode() does now also remove the vnode from the hash - this is done so that the file system is notified about removal/put of the vnode before there is a chance that this vnode is recreated/reloaded (could make the life of file system writers a bit easier). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13877 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b72cf260 |
|
01-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed vfs_vnode_acquire_ref() to vnode_acquire_vnode(). Removed vfs_vnode_release_ref(), as vfs_put_vnode() already does the same thing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13867 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b7d8ef5a |
|
01-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
The term vnode_ptr is not used anywhere else; renamed vfs_put_vnode_ptr() to vfs_put_vnode(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13865 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9882caaa |
|
31-Jul-2005 |
Axel Dörfler <axeld@pinc-software.de> |
The path resolving functions can now also fill in the ID of the parent directory. This is currently only used for the file cache module API. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13862 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
54476a21 |
|
12-Jul-2005 |
Axel Dörfler <axeld@pinc-software.de> |
file_create() now also supports FD relative path specifications. This was the cause for some apps to put their settings files to the current directory, and also that Tracker did not find some icons (from the icons it installed in the MIME database). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13645 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ada59753 |
|
23-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
fs_mount() and get_file_system() can now both handle file system names in the form "bfs" and "file_systems/bfs/v1". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12791 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
47f39c93 |
|
23-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Merged the disk device manager module interface for file systems with the VFS's interface, so that a file system only has to implement one interface. As a side effect, the automatic file system detection may now work (not yet tested, though). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12786 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d5b04e50 |
|
13-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
First step into a new block allocation strategy for the block_cache (right now, it's still malloc/free, just encapsulated in an allocator class). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12662 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6bdc405f |
|
12-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Whenever KPath is used, it will now be tested if it could be initialized (thanks to Ingo for the reminder...). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12652 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
cbd1d997 |
|
11-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Changed all _kern_*() calls to use KPath instead of a path buffer on the stack. This reduces the stack usage quite a lot, and since file system calls could be nested (for example, a mounted image on a volume), definitely a must, too. Might be a good idea for user calls, too, though, although it's not urgent. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12636 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0953c83e |
|
02-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed another bug: after a partition had been mounted, it was only marked mounted, but no one told it about its volume ID - that caused "mountvolume" not to be able to return a valid mount point. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12548 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
47729f04 |
|
02-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed a possible bug in path_to_vnode(): if called before a root file system has been mounted, it would have crashed (that for example happened if you deleted the kernel settings file...). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12547 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2d690920 |
|
13-Apr-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed system/core to system/kernel. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12360 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
eb62d3337b82f4dce6b1a0b3f116e38491c66f14 |
|
11-Sep-2015 |
Axel Dörfler <axeld@pinc-software.de> |
VFS: Slight rework of the FD disconnect feature. * This should fix ticket #4157, although I probably have missed something. * In any case, it no longer messes with the ref counts of the file descriptor, and the race condition in put_fd() should be gone. * It's still rather messy all in all.
|
#
6adf7a0c75beebd9a9bd48602f50ac7c7ae8056e |
|
11-Sep-2015 |
Axel Dörfler <axeld@pinc-software.de> |
VFS: prevent FD inheritance for the kernel completely. * Each io_context now has a "inherit_fds" member that decides whether or not this context allows to inherit FDs to its children. * This replaces the former O_CLOEXEC mechanism.
|
#
e668e80db0334946b01d20e53b03c05dea0f2cb8 |
|
11-Sep-2015 |
Axel Dörfler <axeld@pinc-software.de> |
VFS: Always open kernel FDs with O_CLOEXEC. * Avoids leaking them into userland.
|
#
5d4501aa0187e1a8790784dc2ab3382a16660e93 |
|
20-Aug-2015 |
Michael Lotz <mmlr@mlotz.ch> |
Assorted whitespace cleanup and typo fixes.
|
#
efb0a3a853557e69ecf2bc88adc9a69ed08d1514 |
|
17-Aug-2015 |
Michael Lotz <mmlr@mlotz.ch> |
EntryCache: Add entry_cache_add_missing() for negative caching. It provides a way for filesystems to cache a lookup failure and therefore prevents repeated lookups of missing entries. This is a common scenario for example in command lookup and compiling, where each directory in PATH or each include directory is searched for the given entry.
|
#
3395fdcd6ab08d881ee3bfbb50413eb1c445595d |
|
12-Jan-2015 |
Adrien Destugues <pulkomandy@gmail.com> |
gcc4 build fix. * offsetof is not allowed on non-POD types so we need to use offset_of_member (gcc2 accepts offsetof, and C++11 relaxed the constraints on where it is allowed so it should work there too) * we have offset_of_member as a workaround until we switch to C++11, move it from khash (which is soon to be removed) to list.h which is the other place where it is used (for this one single call in our whole codebase) Also fix a typo in vfs.cpp.
|
#
f9defd45266aef2138460ad8d719b452b3a158bc |
|
12-Jan-2015 |
Adrien Destugues <pulkomandy@gmail.com> |
VFS: migrate to BOpenHashTable.
|
#
76b8f002e1aef2f3b7311178b810f3ed6f505b1c |
|
04-Nov-2014 |
François Revol <revol@free.fr> |
Implement lseek(SEEK_END) on devices While the partitioning system does publish partitions as block devices and report their size in stat(), the old BeOS-style drivers have no means of reporting it this way. So we fall back to ioctl(B_GET_GEOMETRY) to find out the size.
|
#
22ea34153f39a2f995b505173e1571e2a5d39192 |
|
01-Nov-2014 |
Jessica Hamilton <jessica.l.hamilton@gmail.com> |
access: fix to be POSIX compliant
|
#
6bbd25f071e5981c15444c8ba28a92b145b77566 |
|
29-Oct-2014 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Make vfs_resize_fd_table() accessible in the kernel Also update some types from int to uint32.
|
#
5a95af70a2c45a103b96046b5dae5c2b5a303dfa |
|
25-Oct-2014 |
Axel Dörfler <axeld@pinc-software.de> |
vfs/{b|btr|package|b}fs/ext2/exfat: common access check. * Added VFS helper function check_access_permissions() that combines several partially correct versions to the one true version (tm). * All but BFS (since recently) missed the S_IXOTH for root on directories, and all but packagefs missed proper group handling.
|
#
8efd5b761352ca5ba3b5118895c40eedb1cf692b |
|
25-Oct-2014 |
Axel Dörfler <axeld@pinc-software.de> |
vfs: check the X permission on set cwd. * When you change the current working directory, you actually should have the permission to enter that directory. * This gives us a 0.04% better score on the perl test suite :-)
|
#
8ea3e9126db5df5dad3710b63db3383e8024c366 |
|
18-Oct-2014 |
Michael Lotz <mmlr@mlotz.ch> |
Typo: Fix doubled "not" in comment.
|
#
d64267ffb204088ad3ed9bae6078361a829d83de |
|
09-Jun-2014 |
Jérôme Duval <jerome.duval@gmail.com> |
vfs: checks whether the mount's unmounting flag is already set. * thanks to Ingo for suggesting the idea, quoting him: "by holding sVnodeLock read-locked, get_mount() ensures that fs_unmount() can't process the nodes. If it is already past that point, the root node check (not NULL, not busy, ref count > 0) is supposed to detect that. But it doesn't look like this can work. fs_unmount() doesn't set the root node to NULL (the root node field is NULL only during a short period in fs_mount()), but it just frees the nodes after releasing sVnodeLock. So the not busy and ref count > 0 checks could already access freed memory". * tested OK, this fixes #10522. * replaced mount->root_vnode by the local variable with the same value.
|
#
38b150a9de3b51a7b9de6e6e85c066b57d43fc06 |
|
24-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS FIFO: Add "fifo" KDL command Prints information about a FIFO node and, optionally, its data buffer content.
|
#
104c0688da028acab4a5b03801d111673dd091de |
|
11-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
dir_vnode_to_path(): Fix uninitialized status variable
|
#
07f6506eb661220c5e2603c2c6896175a001fa69 |
|
11-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS: Fix broken zero_pages() Besides that it failed to actually iterate through the vectors, it shouldn't try to clear physical memory in the first place. The iovecs refer to virtual address ranges. Rename it to zero_iovecs() to avoid confusion.
|
#
18640f25d904065f9cf16251fee884cdda906e3b |
|
10-Nov-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
vfs: dir_vnode_to_path(): Fix bug with chroot on mount Simplify the code, which also fixes the bug that the I/O context's root was ignored when it was a mount point, thus resulting in globally rooted paths in this case.
|
#
726e47bb80d83fe6af11edd409e5949d66102b9e |
|
10-Sep-2013 |
Siarzhuk Zharski <zharik@gmx.li> |
vfs:Remove extra put_vnode call on error B_LINK_LIMIT exit Fixing the autoconf test: attempt to create file in place of already existing symlink. On error exit put_vnode was called explicitly before returning error. The second, implicit call to put_vnode was issued on destroying the VNodePutter instance that references the same vnode. At this time the vnode has references count equal to 0 so corresponding panic was executed. Great thanks to Ingo for pointing it out! Fixes #9140.
|
#
a56422b448e15901c984daad5f4df2b94b6fff18 |
|
01-Aug-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS: fs_mount(): fix FS name leak Fixes #9909.
|
#
311e148798ae4738157c39ab7783b63e70203192 |
|
29-Apr-2013 |
Jérôme Duval <jerome.duval@gmail.com> |
vfs: fixed two warnings. * warnings about comparison between signed and unsigned integer expressions.
|
#
237127fbe4071abea20f3e5005f5a1e549f12788 |
|
22-Apr-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fix _user_entry_ref_to_path() in chroot * Add "bool kernel" parameter to vfs_entry_ref_to_path(), so it can be specified for which I/O context the entry ref shall be translated. * _user_entry_ref_to_path(): Use the calling team's I/O context instead of the kernel's. Fixes the bug that in a chroot the syscall would return a path for outside the chroot.
|
#
5b6fb78c407a1c15a6793e9009857d4dedfc331d |
|
05-Apr-2013 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
VFS: _kern_open_dir(): Fix NULL path case It would create an empty path buffer and pass that on to dir_open(), which accepts NULL, but not empty paths.
|
#
8627383bf7cc58f79f41a926331aa113814401d4 |
|
22-Mar-2013 |
Alex Smith <alex@alex-smith.me.uk> |
Fixed compilation errors with ENABLE_TRACING set.
|
#
1aef6664d1e120c9dcfc5d7c96f6270243f984f7 |
|
22-Mar-2013 |
Alex Smith <alex@alex-smith.me.uk> |
Fixed compilation of VFS/IORequest trace messages.
|
#
1a0386d743c1e6ffa823e2158192247509564c88 |
|
12-Mar-2013 |
Pawel Dziepak <pdziepak@quarnos.org> |
Fix #8661: fcntl(fd, F_GETLK, ...) violates POSIX The standard states that F_GETLK should check whether given lock would be blocked by another one and return description of the conflicting one (or set l_type to F_UNLCK if there is no collision). Current implementation of F_GETLK performs completely different actions, it "Retrieves the first lock that has been set by the current team". Moreover, if there are no locks (advisory_locking == NULL) an error is returned instead of l_type set to F_UNLCK.
|
#
d50875de46aeb3378feda778b54d3fa288e2571a |
|
02-Dec-2012 |
Michael Lotz <mmlr@mlotz.ch> |
Use format macros in debug output.
|
#
195a0f350e3acd76856016f673c8a871ed687a07 |
|
21-Jul-2012 |
Alex Smith <alex@alex-smith.me.uk> |
Changed argument type of fcntl syscall from uint32 to size_t. Since this argument may be used to pass pointers, uint32 is not correct for 64-bit. Effectively no change on 32-bit targets, both size_t and uint32 are unsigned long there.
|
#
c3f0fd28cda13d70a8c092003609442e4e29cf78 |
|
12-Jul-2012 |
Alex Smith <alex@alex-smith.me.uk> |
Fixed formatting of output in some debugger commands. Currently all debugger commands assume 32-bit pointers when formatting their output. This means that on x86_64 the output is incorrectly formatted. Fixed this by adding a B_PRINTF_POINTER_WIDTH definition (16 on 64-bit, 8 on 32-bit), and using this to correctly format the output. Not all commands have been fixed yet, but all VM, slab, VFS, team, thread and image commands should be correct.
|
#
d764d148b10b8b0f84bbf344ccc9cf35fdb2c99d |
|
27-Jun-2012 |
Pawel Dziepak <pdziepak@quarnos.org> |
Allow file systems to manage file locks Haiku implements file locking at vfs level. That would not work for remote and shared file systems, since they need to negotiate locks with peers. This patch introduces three additional hooks in fs_interface that allow file system module to take over the management of file locks.
|
#
4be4fc6b1faddbd037146214a0011d320842b4f3 |
|
15-Jun-2012 |
Alex Smith <alex@alex-smith.me.uk> |
More 64-bit compilation/safety fixes.
|
#
4bbb27e3ccf0b1e38ee4a63ca9ec765e167a72bd |
|
12-Feb-2012 |
Jerome Duval <jerome.duval@gmail.com> |
More 'GCC4.6 variable set but not used' fixes.
|
#
7ef47de9084a2b73db73fbed07ff62966eadff20 |
|
13-Feb-2012 |
czeidler <haiku@clemens-zeidler.de> |
Revert "Finally applying the patch that adds support to add path information to stat and attr monitor messages." Will recommit it when I have more time to work on the todos. This reverts commit 610ef6c00781522022455c0cbf34495420b2db1d.
|
#
610ef6c00781522022455c0cbf34495420b2db1d |
|
21-Jan-2012 |
czeidler <haiku@clemens-zeidler.de> |
Finally applying the patch that adds support to add path information to stat and attr monitor messages. * for all open FD the path information is stored in a map * this info is used to fill the missing fields in the node monitor
|
#
04999b6cf99c5f5de4abc77d812cad5c497d2703 |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Completed vfs_bind_mount_directory() support We don't need to explicitly track the covered/covering nodes per mount after all. In fs_unmount() we iterate through all vnodes multiple times anyway and can deal with the covers/covered_by vnodes there. Also, the root vnode doesn't need to be handled specially anymore.
|
#
1b08a68a4f3656bd2e0ab526418c5d97e547a5c7 |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
vfs_bind_mount_directory(): Fail if unmounting
|
#
8855625e9eda5284a8d959695e0b86c51148aef0 |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
fix_dirent(): Fix ref count leaks * Only get an additional parent reference, when going to call vnode_path_to_vnode(). * Put the reference of the vnode vnode_path_to_vnode() returns.
|
#
e4320fd78c7c0e51adc84874e9406224fd616b8f |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
remove_vnode(): Also consider covering vnode busy
|
#
54e721afeb11349677b5b9e39c61312753a33cef |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add support for bind-mounting directories * Add support function vfs_get_mount_point(), so a file system can get its own mount point (i.e. the node it covers). Re-added fs_mount::covers_vnode for that purpose -- the root node isn't know to the VFS before the mount() hook returns. * Add function vfs_bind_mount_directory() which bind-mounts a directory to another. The Vnode::covers/covered_by mechanism is used, so this isn't true bind-mounting, but sufficient for what we need ATM and cheaper as well. The vnodes connected thus aren't tracked yet, which is needed for undoing the connection when unmounting. * get_vnode_name(): Don't use dir_read() to read the directory. Since we have already resolved vnode to the covered vnode, we don't want the dirents to be "fixed" to refer to the covering nodes. Such a vnode simply wouldn't be found.
|
#
f4a1387cea3b8a441bc1d952bc562ae34af6647c |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add vfs_ prefix to resolve_vnode_to_covering_vnode()
|
#
47ea54c55bed272f7c506b23d1ff8216e6a57a96 |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Generalize use of Vnode::covered_by/covers * Introduce Vnode flags for covered and covering. Can be used as a quick check when one doesn't already hold sVnodeLock. * Rename resolve_mount_point_to_volume_root() to resolve_vnode_to_covering_vnode(). * Adjust all code that deals with transitions between mount points and volume root vnodes to generally support covered/covering vnodes.
|
#
02be66ca1093b26d538f9aa56ede8564c910acdd |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Replaced fs_mount::covers_vnode by Vnode::covers Introduce a Vnode::covers field. It is currently only used for the root node of an fs_mount, replacing fs_mount::covers_vnode.
|
#
7bb72b8daf2c3579a1f7fb341240e632c493e5b4 |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Comment typo fixes
|
#
a735bdebb94ce14c72f56204f022038de7a49e2f |
|
31-Oct-2011 |
Michael Lotz <mmlr@mlotz.ch> |
Align all filesystem relevant places to use B_UNSUPPORTED for unsupported instead of a mix of B_NOT_SUPPORTED and B_UNSUPPORTED. This allows checking for a specific error code. Probably one of those should be phased out... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43025 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d5e36fb599b43a6a9dfb3cf8e95018fe15780219 |
|
10-Aug-2011 |
Axel Dörfler <axeld@pinc-software.de> |
* Introduced new fs_lopen_attr_dir() function that opens the attribute directory of a file without traversing leaf links (just like lstat()). * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42620 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
33272012fb9f54a00444e7213a59b7312d201095 |
|
10-Aug-2011 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed reversed handling of O_NOTRAVERSE in attr_open(), and attr_create(). * Added support for O_NOFOLLOW for those two as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42619 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fe5928847a347b3a46eea68628388e60796e71db |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Completed vfs_bind_mount_directory() support We don't need to explicitly track the covered/covering nodes per mount after all. In fs_unmount() we iterate through all vnodes multiple times anyway and can deal with the covers/covered_by vnodes there. Also, the root vnode doesn't need to be handled specially anymore.
|
#
0be138ab2f4098d3910880c92f94de8f4c2ea0df |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
vfs_bind_mount_directory(): Fail if unmounting
|
#
19c48aa4ae39e2b2ff84224e66b9f8e7b0280c3f |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
fix_dirent(): Fix ref count leaks * Only get an additional parent reference, when going to call vnode_path_to_vnode(). * Put the reference of the vnode vnode_path_to_vnode() returns.
|
#
9561ddca0f8e80582cd352f8f80b187bce7195ed |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
remove_vnode(): Also consider covering vnode busy
|
#
d61a8548f9d5efd322004bfd62c57e5a3891cdbf |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add support for bind-mounting directories * Add support function vfs_get_mount_point(), so a file system can get its own mount point (i.e. the node it covers). Re-added fs_mount::covers_vnode for that purpose -- the root node isn't know to the VFS before the mount() hook returns. * Add function vfs_bind_mount_directory() which bind-mounts a directory to another. The Vnode::covers/covered_by mechanism is used, so this isn't true bind-mounting, but sufficient for what we need ATM and cheaper as well. The vnodes connected thus aren't tracked yet, which is needed for undoing the connection when unmounting. * get_vnode_name(): Don't use dir_read() to read the directory. Since we have already resolved vnode to the covered vnode, we don't want the dirents to be "fixed" to refer to the covering nodes. Such a vnode simply wouldn't be found.
|
#
313e1e37f229242df626cb34f466d388590d62d9 |
|
21-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Add vfs_ prefix to resolve_vnode_to_covering_vnode()
|
#
2e21fc543649e665507240f0803de9dddc26f152 |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Generalize use of Vnode::covered_by/covers * Introduce Vnode flags for covered and covering. Can be used as a quick check when one doesn't already hold sVnodeLock. * Rename resolve_mount_point_to_volume_root() to resolve_vnode_to_covering_vnode(). * Adjust all code that deals with transitions between mount points and volume root vnodes to generally support covered/covering vnodes.
|
#
3cc710798baa42c155dd2e5c4c75306755ae2fd7 |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Replaced fs_mount::covers_vnode by Vnode::covers Introduce a Vnode::covers field. It is currently only used for the root node of an fs_mount, replacing fs_mount::covers_vnode.
|
#
9280379a7bf876ccde70040d6b7448b85c1e48f5 |
|
20-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Comment typo fixes
|
#
24df65921befcd0ad0c5c7866118f922da61cb96 |
|
11-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged signals-merge branch into trunk with the following changes: * Reorganized the kernel locking related to threads and teams. * We now discriminate correctly between process and thread signals. Signal handlers have been moved to teams. Fixes #5679. * Implemented real-time signal support, including signal queuing, SA_SIGINFO support, sigqueue(), sigwaitinfo(), sigtimedwait(), waitid(), and the addition of the real-time signal range. Closes #1935 and #2695. * Gave SIGBUS a separate signal number. Fixes #6704. * Implemented <time.h> clock and timer support, and fixed/completed alarm() and [set]itimer(). Closes #5682. * Implemented support for thread cancellation. Closes #5686. * Moved send_signal() from <signal.h> to <OS.h>. Fixes #7554. * Lots over smaller more or less related changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42116 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8775d8d25d66d46c31d929547b6f16b9a88900a1 |
|
05-Mar-2011 |
Jérôme Duval <korli@users.berlios.de> |
dir_remove() now handles a path which ends with "/./" and fixed #6817. Another way would be to disallow removing such a path, as Linux does. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40819 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
548836e4f8294e7ec90734f8cd79da9a9daa08a5 |
|
02-Mar-2011 |
Jérôme Duval <korli@users.berlios.de> |
* if ioctl hook wasn't found, now returns B_DEV_INVALID_IOCTL * in case fd_ioctl() was about to return B_DEV_INVALID_IOCTL, translate to ENOTTY to satisfy #7279. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40787 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
137c5fe2ba9706736db4af57584b663b1b282f6c |
|
16-Jan-2011 |
Oliver Tappe <zooey@hirschkaefer.de> |
* add implementation of bindfs, which can be used to bind-mount a folder to some other place in the filesystem hierarchy * add helper function to VFS that encapsulates the "conversion" of a vnode-pointer to a fs_vnode-pointer (used by bindfs) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40238 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4535495d80c86e19e2610e7444a4fcefe3e0f8e6 |
|
10-Jan-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged the signals branch into trunk, with these changes: * The team and thread kernel structures have been renamed to Team and Thread respectively and moved into the new BKernel namespace. * Several (kernel add-on) sources have been converted from C to C++ since private kernel headers are included that are no longer C compatible. Changes after merging: * Fixed gcc 2 build (warnings mainly in the scary firewire bus manager). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
66e8557230e3b30984f25f9ea6b616c56ae7c2aa |
|
02-Jan-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
common_rename(): Fixed incorrect check (array address instead of first element, CID 4077). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40082 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2757dc8c3a2372875b83081ea9a453a2c04ccbfa |
|
21-Nov-2010 |
François Revol <revol@free.fr> |
Fix build with VFS_PAGES_IO_TRACING. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39566 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
31d8c43d1c04be453ff6b7afa3f2cdb95cde4bc6 |
|
28-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed CID 1262: waitForLock was not only -1 when exiting the loop, it didn't make much sense to wake up any waiters either in this case. * Fixed doubled semaphore deletion. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38418 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
87de0cb4e1cc09e5beb1a3500d239ca19b0210dd |
|
17-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed CID 1199-1202: only call the cache listener in case the open succeeded (this might also have derefenced a potentially freed vnode). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8e855d520a06880a32d7d481b8b9bab0b8359852 |
|
02-Aug-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* Changed some POSIX error codes to native ones. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37842 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c019945cbd4e36914c6eba37e2f4c2d60a25b117 |
|
17-Jul-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added detail to the comment about why we can't call the create() hook without O_EXCL. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37555 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1cdc3cbbe41a904332b93f5185d9a3eeb00dd356 |
|
18-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
The vnode cache also considers the address space low resource state, now. Together with vnode associated structures like file cache, VMCache, and file system specific structures the impact on heap usage (and thus address space) is considerable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37169 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
435c43f5912b109e7d5cf682865d2061e62fad8c |
|
02-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced type generic_io_vec, which is similar to iovec, but uses types that are wide enough for both virtual and physical addresses. * DMABuffer, IORequest, IOScheduler,... and code using them: Use generic_io_vec and generic_{addr,size}_t where necessary. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36997 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9d570af7c878ba30043b23e6dce5f3ae5578aa7c |
|
24-May-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Changed the type of the "op" parameter of the fs_vnode_ops::ioctl() hook and the _kern_ioctl() syscall from ulong to uint32. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36927 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1888e2289d471cdb8fdacb3ad2b65e353a7ac11a |
|
14-Apr-2010 |
Michael Lotz <mmlr@mlotz.ch> |
bonefish+mmlr: The O_CLOEXEC open mode wasn't actually set in the close-on-exec bitmap causing all files opened with O_CLOEXEC (like done in the storage kit classes) to still be inherited. This caused for example to be unable to unmount volumes when opening apps while Tracker touched some files (i.e. copying some large files) since these apps would inherit the file descriptor and therefore keep the volume busy. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36273 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
74fc3e9a8bc4831206f84209be224cad7792dc0e |
|
14-Apr-2010 |
Michael Lotz <mmlr@mlotz.ch> |
bonefish+mmlr: * Add file descriptor and IO context tracing. * Some minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36272 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7d9bce24834550b9473a11072bc5dc3da69067cd |
|
27-Feb-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
debug_resolve_vnode_path(): Avoid duplicate slash at the beginning of the path. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35642 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c35e2c70cba0295f8926aa255b5bbcb3fe5136f0 |
|
26-Feb-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added option "-p" to the "vnode" debugger command. Using the entry cache it tries to resolve the vnode's path. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35626 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
21d9331efa64d6f4d1446d57b6ae79490431d8be |
|
23-Feb-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Beautified the output of the "io_context" command. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35582 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d0e43cc7cbab464a1d09245052d4210a7b667e23 |
|
24-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
"vnode" does now also print the node type. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35280 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fb1819be9514a50392eb87f9a593aca9fcc09fe6 |
|
07-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Eliminated sVnodeCoveredByMutex. The Vnode::covered_by field is now also protected by the global vnodes lock. The contention mostly moves to other locks, though. The total -j8 Haiku image build time is only reduced minimally. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34938 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7fc65e14884ef98b696461957ef223f47768fdee |
|
03-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
fs_unmount(): We need to hold the vnodes write lock after all. The upside is that it saves us from locking the individual vnodes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34872 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a210e610534a28559091fc8a50b32171dbdecde1 |
|
03-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* free_unused_vnodes(): Be a good citizen and use vnode_used() instead of playing with the unused list manually. This also clears the vnode's unused flag, which wasn't done before and would thus cause corruption of the unused list a bit later. * fs_unmount(): - Fixed an iteration bug I introduced previously. The iterator would be advanced twice per iteration, leading to NULL pointer dereferencing when the vnode count was odd and skipping the checks for every other vnode. - All vnodes are going to be freed, so vnode_to_be_freed() has to invoked for every one of them. The code wasn't adjusted correctly when introducing the hot vnodes handling. * Adjusted/improved some comments. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34871 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5484890096d122519e722d0a31b478eaa7e8ea1d |
|
02-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Moved the unused vnode management to a new file. Well the few variables used for it that is. * The main cause for the heavy contention of the unused vnodes mutex was that relatively few vnodes are actually used for a longer time. Mainly those are the volume roots, mmap()ed files, and the files opened by programs. A good deal of nodes -- particularly directories -- are just referenced for a very short time, e.g. to resolve a path to a contained entry. This caused those nodes to be added to and removed from the unused vnodes list very frequently, thus resulting in a high contention of the mutex guarding it. To address the problem I've introduced an approximation of a set of "hot" vnodes, i.e. vnodes that have recently been marked unused. They are stored in an array that by means of an r/w locker and atomic operations can most of the time be accessed concurrently. Whenever it gets full, it is flushed to the actual unused vnodes list. * dec_vnode_ref_count(): No longer check the unused vnode count every time. The called new vnode_unused() does only from time to time and returns when the caller is expected to free some of the unused vnodes. As a side effect this also fixes a bug I previously introduced: The unused vnode to be freed was marked busy without being locked first. The -j8 Haiku image test build shows that the changes reduce the contention of the unused vnode list mutex to virtually zero without introducing any significant contention of the new r/w lock. The VMCache lock contention also seems to be decreased somewhat, which is probably not that surprising considering that the page writer acquires/releases vnode references with the cache lock held. The "pages" lock takes over even more contention, now causing more than 100000 waits per second. The total build time reduction is about 4.5%. Kernel time drops more than 10%. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34866 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8ccbb7815ced1c3900042f36ff32ccd1f7f812d9 |
|
02-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Moved the vnode structure (to by Vnode class at some time in the future) into its own header/source files. * Changed vnode's bit fields to a single, atomically changeable int32 using flags instead. Added respective accessor methods. * Added a per-vnode mutex-like lock, which uses 2 bits of the structure and 32 global "buckets" which are used for waiter lists for the vnode locks. * Reorganized the VFS locking a bit: Renamed sVnodeMutex to sVnodeLock and made it an r/w lock. In most situations it is now only read-locked to reduce its contention. The per-vnode locks guard the fields of the vnode structure and the newly introduced sUnusedVnodesLock has taken over the job to guard the unused vnodes list. The main intent of the changes was to reduce the contention of the sVnodeMutex, which was partially successful. In my standard -j8 Haiku image build test the new sUnusedVnodesLock took over about a fourth of the former sVnodeMutex contention, but the sVnodeLock and the vnode locks have virtually no contention to speak of, now. A lot of contention migrated to the unrelated "pages" mutex (another bottleneck). The overall build time dropped about 10 %. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34865 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fb5c39cb6d83d81ecc3e7608cf208b53c7212fd2 |
|
01-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Removed TODO again. I tried a similar event mechanism as used for busy pages in VMCache, but, if anything, that makes a -j8 build marginally slower. I guess busy vnodes are encountered so rarely that the additional overhead for a more intelligent algorithm isn't really worth it. Reduced the wait time, though. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34845 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f42efbcd26947b3394c94f7462ae2c0f6455a1d3 |
|
01-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Moved the entry cache implementation into its own file. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34843 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7a9b8baa54b410f17a561570bf39e9d6c28c24f0 |
|
01-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Made vnode::type private, renamed it to fType, and added accessor methods. It stores the value right-shifted by 12 bits, now, since those bits are not relevant. This saves some bits and also resolves a TODO. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34842 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3caec2871a079cb604982ce7e5fc56865a7b438d |
|
01-Jan-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Resolved TODO in free_vnode(): There was a race condition between vnode destruction and VMVnodeCache::AcquireUnreferencedStoreRef(). Solved by adding a flag to VMVnodeCache and letting AcquireUnreferencedStoreRef() fail, if set. * Added TODO regarding replacing the snooze() waiting for busy vnodes. * get_vnode(): Unlock sVnodeMutex while calling the put_vnode() hook on error. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34841 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e50cf8765be50a7454c9488db38b638cf90805af |
|
02-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Moved the VM headers into subdirectory vm/. * Renamed vm_cache.h/vm_address_space.h to VMCache.h/VMAddressSpace. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34449 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a477e3cf200097774f88ed4e4134f87674a2a063 |
|
01-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Finished renaming of vm_cache to VMCache. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34424 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f31ffa6b8aa940bea5b13953697bc214ccd7bf5e |
|
26-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Use O_CLOEXEC when open directories, attribute directories, indexes, and queries. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34291 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
486fffdaaf7f16e65bea9f4fde7d5d3c3726ece8 |
|
26-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Forgot to add linkat(), this really closes #4928 now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34289 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fb2500da15e8c574cbb343b8fc536d7094357f54 |
|
26-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Added missing AT_EACCESS. * Implemented renameat(), faccessat(), fchownat(), fchmodat(), and mkfifoat(). * Added stub for mknodat(). * The kernel backend for faccessat() does not yet differentiate between effective and real user/group IDs, though. * Removed B_ENABLE_INCOMPLETE_POSIX_AT_SUPPORT, as we now support everything (more or less). This also closes ticket #4928. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34288 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7ce581d7eb0618c10f6986abc3ddb32abd807db2 |
|
26-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Eliminated the extra buffer in dir_vnode_to_path(); we write directly to the specified buffer now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34282 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
00362625b990ef6fffd8117df67e431893171453 |
|
26-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Added support for O_NOFOLLOW. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34279 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
432bb91f34eccedc387684e200db3e645b43a7a0 |
|
25-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* dir_vnode_to_path() now uses B_* error codes instead of POSIX ones, and also returns the correct error code if the buffer was too small (should be ERANGE instead of ENOBUF). * Also, it is now independent of B_PATH_NAME_LENGTH, and therefore should fulfill POSIX getcwd() requirements. This should also close ticket #3352. * Is there any reason to allocate another buffer instead of using memmove() at the end instead of memcpy()? git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34276 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1ba04177d3f10173d03433e9a7d37e46c2161428 |
|
25-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* load_image() now has exec() semantics wrt file descriptors; before each team would always inherit them all, causing quite a number of open files. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34247 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
713cc7fc843376ae9c8d1adc2ab27aa762d6a025 |
|
17-Nov-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added fs_read_attr(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34085 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c3dbe62619cf35c94f43cc3340a55c04f5a3bc97 |
|
10-Nov-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
_user_open_dir(): Allow a NULL path to be passed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33973 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f40c5e32115c22bd1b76ee1abe607040c09681a9 |
|
05-Nov-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* common_rename() now checks the name for validity before passing it on to the file systems, so those checks don't have to be duplicated there, anymore. * Minor cleanup, mostly automatic whitespace. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33895 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
095a7d841532784712684844f93fa242017fae69 |
|
18-Oct-2009 |
Jérôme Duval <korli@users.berlios.de> |
using chroot with a mount point wrongly exposed the mount point name: we now avoid resolving the volume root in case we hit the IO context root. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33645 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a9689e8492e520d532410c762bb3d5e3a5ac4819 |
|
30-Sep-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* VFS: - Fixed vfs_get_vnode_from_fd() return type. - Added vfs_open_vnode(). - Added a "bool traverseLeafLink" parameter to vfs_get_fs_node_from_path(). It was always resolving symlinks. * device manager/devfs: - devfs: get_node_for_path() no longer resolves leaf symlinks. That still doesn't help with file disk devices, as creating partition wouldn't work anyway. - Pulled the module-related implementation part of BaseDevice into new class AbstractModuleDevice and made all methods of BaseDevice virtual. Small adjustments to devfs to be happy with the new BaseDevice interface. - Added BaseDevice subclass FileDevice, which maps the interface to a file's file descriptor. Still got a few TODOs, but should basically work. - Use FileDevice for publishing file disk devices in devfs. Now those do actually work, though there's some BFS trouble with one of the images I tested. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33385 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a2bb34144733cba83af0ebd940df23802af2f237 |
|
01-Sep-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Cleanup, no functional change. + alphabranch git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32890 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7435db9ff0ca459441d8fe6f8b9eb64725de28e3 |
|
14-Aug-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* _user_read_dir(): Allocate a temporary heap buffer passed into the kernel instead of using the user buffer. This frees the VFS and FS implementations from handling user buffers. * Adjusted fix_dirent() accordingly. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32384 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
368fc35adf01677d4ca07c276fb58f4382fcf101 |
|
13-Aug-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Also have the uppper limit check in the assert. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32323 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
48cb56d8efa4b9d7e11948801de46d0275b473e8 |
|
13-Aug-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* We also shouldn't try to copy if the dirent is too large, obviously. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32314 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f9ba5c92e3db310ec7386d98784ac9b6beff175c |
|
12-Aug-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Let fix_dirent() handle invalid reclen's gracefully. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32306 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a068dcb15a83460fe1bee5f8727af3ff12c66fe9 |
|
11-Aug-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* cdda_read_dir() could copy too many bytes into the provided buffer (worst case was an unterminated string, though). * fix_dirent() did not copy the trailing null-byte. * Not yet entirely sure why, but this caused #4214. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32254 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f7a6506e0fc86667de44a90a438838787a2fe6b3 |
|
06-Aug-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Replaced all "status < B_OK" with != B_OK - this should make the VFS layer more robust against broken (userland) file systems. * 80 character column cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32184 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
061d2ed1a2831e98270c30dec531a63b37251fd9 |
|
30-Jul-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Creating a symlink now fails with B_NOT_SUPPORTED instead of B_READ_ONLY_DEVICE if it has a write hook. * This fixes bug #4141. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32004 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8ae594ffd47d73edb1c9b9e1240a1ee667197472 |
|
28-Jul-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Introduced dedicated syscalls for the deprecated BeOS fs_attr API. Before, each attribute access needed 3 syscalls, now only one as it should. * Renamed the new Haiku call fs_open_attr() to fs_fopen_attr(), and added a new function fs_open_attr() that takes a path (same semantics as the fs_[f]open_attr_dir() functions already present in BeOS). * Merged former _kern_open_attr(), and _kern_create_attr() into one syscall. * Cleaned up vfs.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31881 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5147963dcd57fefa4f63c484eb88e9eaf4002976 |
|
26-Jul-2009 |
Stephan Aßmus <superstippi@gmx.de> |
headers/private/kernel/util/OpenHashTable.h, Hugo's version, is a bit nicer than Tracker's OpenHashTable.h which it should eventually replace. We've renamed the class to BOpenHashTable and changed the interface slightly so that HashTableLink became superfluous. Adapted all the code that used it. Since the OpenHashTables no longer clash, this should fix the GCC4 build. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31791 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6def1a637b1ef1b915f87bb2fb015bd90559ff7f |
|
26-Jul-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* In order to resolve mount points, fix_dirents() retrieved all vnodes from disk; but since mount points are always kept in memory, it makes much more sense to use lookup_vnode() instead. * As a side effect, directory listings are no longer aborted when they contain broken files that could not be retrieved anymore. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31775 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
874f23496bbfc03fe82bb0340a0462446c5711c0 |
|
11-Jun-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Returning random stat data isn't really nice. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31010 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fa773c0ae535212b774a7f98d50cb6ece7b5d6c2 |
|
01-Jun-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
vnode_path_to_vnode(): Don't propagate the traverseLeafLink flag, if we've decided to recursively resolve a symlink. We only have to do the resolution when the flag is true anyway or the symlink is not the last component of our path, in which case we have to resolve it anyway. Fixes #3986. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30937 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ce4db6ae11644d566396362274677bab3f9c516d |
|
16-May-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* The covered vnode release was never put when it already was a mount point during fs_mount(). This fixes bug #3934. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30773 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
78e7cdaedefec77f0b0d7cb145c34736c3553600 |
|
16-Apr-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Removed the get_next_removed_vnode() call again - besides the problems Ingo pointed out, there is also an unsolvable race condition with BFS that other file systems should share. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30204 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4e98292b8ee6eabfff9fd01a39e0aaf9da9a1fba |
|
15-Apr-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Introduced new call get_next_removed_vnode() to be able to iterate over removed but not yet deleted vnodes. * Simplified get_vnode_removed(). * Header cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30176 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3cf43c26516b695e35b7433196a530f7541c4ca8 |
|
25-Mar-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Removed the fs_vnode_ops::create_dir() parameter for returning the ID of the newly created dir. The VFS really doesn't need it and for some file systems it might not be easy to get by. Several file systems (e.g. rootfs and fat) were ignoring the parameter anyway. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29719 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c9bc3be3d9bdc347796afc45c4decfd6e08e112f |
|
12-Mar-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Minor cleanup, no functional change. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29480 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
aa4ba93e25c1c63730ba69e04d3d96c3253924fd |
|
08-Mar-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed src/system/kernel/device_manager/io_requests.{h,cpp} to IORequest.{h,cpp}. * Introduced public <io_requests.h> header. Currently it only declares the single function BFS uses. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29446 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
43b2ca9108e66fb3f841f2c4fa102f83c6c5e5a0 |
|
02-Mar-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed wrong use of MutexLocker as pointed out by Korli - nice catch! This could have caused a number of problems. * Fixed coding style violation Ingo introduced. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29378 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5ecc4b37752beba35afeb7ef446f07c3c6d01971 |
|
01-Mar-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced ref-counting for the I/O contexts. * The I/O context related vfs_*() functions have io_context* instead of void* parameters/return values, now. * vfs_new_io_context(): Lock the parent I/O context before getting its table size. Otherwise the table size could change until we do. * vfs_resize_fd_table(): Fixed use of MutexLocker. We created only a temporary object, not one with function scope. * Renamed load_image_etc() to load_image_internal() and added a parameter for specifying the parent team of the one to create. * Introduced a kernel private load_image_etc() with a few more arguments than load_image(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29375 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f6d0017deab0036855f266cddaad5697577fabe9 |
|
28-Feb-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fixed duplicate parameter name. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29342 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2e47b62e2c49225cd4aa0478d453c48f5d5902f0 |
|
27-Feb-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Consolidated '*' style. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29341 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ed3e5ec0311062fa5661aa1dead48533cc6477e3 |
|
27-Feb-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* zero_pages() did not fill in the _bytes parameter correctly - it returned how many unclear bytes remained instead of how many were cleared. This caused sparse files to show garbage instead of empty space. This fixes bug #2889. * common_file_io_vec_pages() set "size" (size_t) from file_io_vecs::length which is off_t without taking into account that important information could be lost. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29339 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
63448c92a43a314d3cc7092c358888cff6270f06 |
|
23-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Better do the check for "." and ".." after stripping off superflous leafs as otherwise a "rmdir ./" would still have caused the corruption. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29299 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
24a7f4c285b3ddaaf3761994d6524c1fb919d6bd |
|
23-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Disallow removing the "." entry. We do the same for ".." already and it seems to be in line with what other systems do as well. Also fixes bug #3476. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29296 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
77b26c3221eafb7a9209b072f0e264b74f325388 |
|
19-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
We need a longer filesystem string here to fit in all the possible layers. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29259 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
49004dc730f842ea3c162b56dee63696c51d17c7 |
|
19-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Remove the additional fs_vnode_ops arugment from get_vnode() again as it's not needed at all when used as intended. Thanks Ingo for the explanation on how this is intended to work. Adjusted the overlay fs accordingly and updated/reverted the changes to the other filesystems. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29250 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b1a58597b94bdc047e3587cf730577210db6aefb |
|
18-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Add a new fs_volume op all_layers_mounted() that is called when all layers have been mounted. This is to allow layered filesystems to setup internal data that requires all the sub/super volumes to be available. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29248 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a26c24392042ca7bfad2e78f73a0b75c463c0455 |
|
14-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
* Adding volume ops to the overlay filesystem. * Remove the previous method of applying the overlay by flags. In the future the overlay can just be mounted as a filesystem layer. This is probably how layers were intended to work in the first place. * Move the filesystem module info and filesystem name from the fs_mount to the fs_volume structure. Filesystem layering is done by having multiple layered volumes and we want to be able to have a different fs per layer. * Adapt VFS code to this move. * Implement mounting layered filesystems. Specifying multiple filesystems separated by a colon on mount will cause the layers to be set up and the corresponding filesystems to be mounted at that layer. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29199 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6e5f12279dbc7d0fd20739c5c9d28545fddedcab |
|
13-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Handle the overlay request flag in publish_vnode() as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
00405f2286fd370a0bd264d0bbac0cfa120e7646 |
|
09-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
* Add an additional argument to get_vnode() that gets the fs_vnode_ops of the node. That is needed for a layered filesystem to be able to construct a full fs_vnode out of a volume/inode pair. * Adapt places where get_vnode is used. Sadly this is a C API and we can't just use a default NULL for that argument. * Introduce a flag B_VNODE_WANTS_OVERLAY_SUB_NODE that can be returned in the flags field of a fs get_vnode call. A filesystem can use this flag to indicate that it doesn't support the full set of fs features (attributes, write support) and it'd like to have unsupported calls emulated by an overlay sub node. * Add a perliminary overlay filesystem that emulates file attributes using files on a filesystem where attributes aren't supported. It does currently only support reading attributes/attribute directories though. All other calls are just passed through to the super filesystem. * Adjust places where a HAS_FS_CALL() is taken as a guarantee that the operation is supported. For the overlay filesystem we may later return a B_UNSUPPORTED, so make sure that in that case proper fallback options are taken. * Make the iso9660 filesystem request overlay sub nodes. This can be fine tuned later to only trigger where there are features on a CD that need emulation at all. If you happened to know the attribute file format and location you could build an iso with read-only attribute support now. Note that this won't be enough to get a bootable iso-only image as the query and index support is yet missing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29177 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c33667d400856680a8e0122300861eda77d1847a |
|
01-Feb-2009 |
Michael Lotz <mmlr@mlotz.ch> |
Fixing warnings under GCC4 in preparation to enable -Werror there as well: * Replaced the use of offsetof() for structs that aren't PODs. Add a offset_of_member() macro to util/khash.h because that's what it's used for in our cases. * Change the signature of add_debugger_command()/remove_debugger_command() on GCC > 2 to avoid the depricated conversion from string constants to char *. * Adding some "suggested" parenthesis. I know that not everyone likes that, but it pointed out at least one bug that is fixed here as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29113 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f58d8cf2352699bd7c43294a82f7867c1ff73180 |
|
11-Jan-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* _user_flock() will no longer accept invalid operations, thus fixing bug #3141. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28889 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fbb7d4cd578af1cf098cbefa182537aa4585b82d |
|
11-Jan-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* fs_write() is optional for read-only file systems. This fixes bug #3062 and also #3083 (although I could not reproduce the latter). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28881 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6a90578f76470cc34c64494b1fe1bb69b7cda842 |
|
06-Jan-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Removed a left-over mutex_unlock() that could cause a panic on removing a busy vnode. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28851 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5500d8a54f5db24d94e12019020d7ee26872efc7 |
|
06-Jan-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* All file descriptors that only refer to a mount now keep the mount, ie. they won't call put_mount() before they are freed. Internally, this causes them to grab a reference to the mount's root vnode. * This fixes bug #3262. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28850 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
55ddbd7bca54878d861861e82c0c5a0d196c1b85 |
|
13-Nov-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* When a file system reports -1 offsets in its fs_get_file_map() function, this will now accepted and regarded as sparse file data. FileMap::_Add() also correctly joins multiple vecs with that offset together, FileMap::Translate() will always report offset -1 even for offsets into that extent. * read_file_io_vec_pages() (or rather, its backend common_file_io_vec_pages()) now supports sparse files, and will just clear the memory it should read from offset -1 instead of passing a request to the vnode. * ext2 now correctly reports sparse files. This should close bug #2889, as well as #975. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28648 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7e621f16d0362cf81b58c63600781074c4fb25db |
|
05-Nov-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Use parse_expression() for argument parsing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28515 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
67804f25edcff8690f7ec142d8b0ba7702bfd5e5 |
|
27-Oct-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* fs_unmount() removed the vnodes of the fs_mount twice since r28215, triggering an assert. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28344 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e967b93ab6f8d6fe27f8ca02123c39bc396b143d |
|
26-Oct-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* vfs_stat_node_ref(): Added missing initialization of stat::st_{dev,ino}. * stat::st_rdev is unused, but at least initialize it with some deterministing value. This makes Perl's lib/File/stat.t test happy. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28333 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1894a0a98b5b2102f83c00b7273ba7654334f469 |
|
20-Oct-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Consistently use KDEBUG. It is always defined and therefore must be checked with "#if". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28247 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3b839d857b4bc92bde6faaa3a5db31398a4f2882 |
|
18-Oct-2008 |
Michael Lotz <mmlr@mlotz.ch> |
The fs_mount structure now has a constructor/destructor and is used with new and delete. Therefore the constructor/destructor of the contained EntryCache is also called. The manual call of the destructor to the OpenHashTable inside the EntryCache was therefore superflous and the destructor would be called twice, leading to bug #2869. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28232 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
703aecaaa5c3b4a2df2cc80bf2bc2ad0a2287ab2 |
|
17-Oct-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Instead of having the mount_link, struct vnode now subclasses from DoublyLinkedListLinkImpl, and fs_mount now uses a DoublyLinkedList instead of a typeless struct list. * Also added a constructor/destructor to fs_mount which simplifies and cleans some code. * This should not contain any functional changes :-) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28215 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
552c8edcd1a23c7106bd3976af7f2034078f995a |
|
17-Oct-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* fs_sync() now holds the sVnodeMutex while iterating over the mount list. * This has the advantage that we no longer need to call get_vnode(), and instead can use lookup_vnode(). * This means at least most of the "corrupted BFS inode" messages should be gone; they were produced when fs_sync() tried to get already deleted vnodes. This was actually harmless, but doesn't really help in trusting your system :-) * Also, it no longer tries to write back removed vnodes. * And finally, it now uses a marker vnode when iterating over the list, so that it doesn't need to break out of the loop anymore, and can always sync all willing vnodes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28212 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e8d3eff9689f3436efa2863b9bf4afc84f79e0a3 |
|
26-Sep-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* vfs_normalize_path() and _user_normalize_path() use a common helper function (normalize_path()), now. There was some code duplication before. * Added "bool traverseLink" parameter to vfs_normalize_path(). When true and the leaf component is a symlink, it will be resolved. * KPath: - Added similar leaf link traversal parameter to SetTo() and SetPath(). - Added Normalize(). - Added DetachBuffer(), which returns the object's current buffer and unsets itself. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27751 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ee1a1571a21825526da904634316649f06647268 |
|
07-Sep-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Implemented a simple directory entry cache to speed up path resolution. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27366 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2aa5367afbbc2eb2edc35ed08df16d67407bf7a4 |
|
24-Aug-2008 |
Jérôme Duval <korli@users.berlios.de> |
extended debug check for FS_CALL() to others FS_CALL() versions git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27189 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8cf7754bc7c786a958e86bc35bee36c2b74ff5bf |
|
24-Aug-2008 |
Jérôme Duval <korli@users.berlios.de> |
added a check in FS_CALL() for null hooks in KDEBUG mode git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27188 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2fd4fdcf3b0512c880033f4027941440fce93629 |
|
22-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Changed the way fix_dirent() copies the entry: it will now copy the complete dirent without the name first, and will then check if the d_reclen member is valid before copying the name. * This shows the problem with the FAT file system that was revealed by r26859. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27128 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a3afb5ee0dab808bb0157f6d366b2852917267d1 |
|
09-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Handy on-demand debug tracing, I've used a few times already. So I leave it commented out in the code for the time being. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26907 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
49a7b6198dcc0bdcbe285b078a4c98f7a9a6d554 |
|
07-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* fix_dirent() now correctly handles buffers from userland. * dir_read() now takes into account that we may have read more than one dir entry, and calls fix_dirent() for each of them. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26859 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
58306fecd6c5645210f041ae4d88abe56016f841 |
|
02-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added tracing for vfs_{read,write}_pages). * {read,write}_pages() use vfs_{read,write}_pages() now, instead of invoking the FS {read,write}_pages() hooks. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26750 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
15374c5dbdb2c6b700bb2191887cadad7ef9eb73 |
|
02-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Renamed thread_spinlock and team_spinlock to gThreadSpinlock and gTeamSpinlock. * Renamed the static global variables in smp.c to match our style guide. * Minor other cleanup. * Removed superfluous white space. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26730 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9f6ae76f020cd6cf1fca7a3ae21ee7819581307d |
|
01-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added acquire_vnode() call that you can use to get another reference to an inode - unlike get_vnode() the busy flag won't prevent you from getting that reference. * Changed put_vnode() to return an error in case the vnode couldn't be found. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26713 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7f12cc54a729622cd04940ee9400958413d99b21 |
|
30-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* It is now supported that I/O operations and requests are only handled partially (e.g. due to hitting the end of file). The respective classes have grown new methods and attributes to deal with that. The "finished" callbacks have got additional parameters to indicate whether the transfer was only partial and how much has been transferred. Other callbacks and functions have a size_t* in/out parameter instead of a simple size_t, now. * vfs_{read,write}_pages() do now use the I/O request framework instead of the underlying FS's {read,write}_pages() hooks (those should be unused now). Furthermore they've got an additional "flags" parameter, which is passed to IORequest::Init(), i.e. it allows to specify that the given vecs refer to physical addresses. * The file cache's read_into_cache() reads directly into physical pages, now. * Fixed bug in DoIO::IO(): The offset was not adjusted, so that all pages were incorrectly transferred from/to the same location. * Fixed broken subrequest scheduling loop head in do_iterative_fd_io_iterate(). * Adjusted the test driver and implemented its io() hook. Using this driver I/O requests are passed all the way from the VFS/VM to the driver and through the I/O scheduler. It even seems to work. :-) * Added missing const to the iovec* parameter of the IORequest::Init() methods. * Disabled some debug output by default. Added new optional debug output. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26692 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7df40c23f6259559b97604ba66d0384311c51e0b |
|
28-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added handy function volume_for_vnode() which returns the fs_volume for a given given fs_vnode. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26669 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ec598fe493579e3d522453cb407ca3c6b57d715a |
|
27-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added FS interface hooks io() and cancel_io(). The former is supposed to provide asynchrounous (or only synchronous, if asynchronous is not supported) I/O request support. It will eventually replace {read,write}_pages(). None of the FS implementations implement them yet. * Implemented some support functions for request-based I/O. File system implementations can use do_fd_io() which passes an I/O request to the layer responsible for a given FD, and do_iterative_fd_io(), which translates a request for a file to subrequests for the underlying device and passes them on. Both fall back to synchrounous processing when the io() hook is not supported. Furthermore added vfs_synchronous_io() which should be handy for the devfs to perform io_requests synchronously for devices that don't support the io() hook. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26655 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ef7fb431edae5dce89a52bdc822a6bdbc104cf80 |
|
23-Jul-2008 |
Rene Gollent <anevilyak@gmail.com> |
Remove extraneous put_vnode(). This would result in decrementing the vnode ref count even if an unmount operation failed, which in turn would cause other fun problems. This fixes tickets 1982 and 2538. However, there seems to be another problem remaining with unmounting: the placeholder dir in the rootfs is not removed when the volume is unmounted, or it's not reused correctly. As a consequence, on subsequent remounts of the same volume via Tracker or mountvolume, a new dir is created each time, leaving empty placeholders. (i.e. remounting the volume HaikuData results in the creation of /HaikuData1, 2, 3, 4, etc.). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26586 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e6bd90c58dbae64f3b464edcff90dcb06e63a716 |
|
23-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* bfs_fsync() was the only place which could cause the fs_vnode_ops::write_pages() to be called with fsReenter = true. Since this is no longer the case, the argument has become superfluous. For read_pages() it always was. Removed the argument from the functions and all functions that propagated it. * Some whitespace at the end of lines was removed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26579 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5c99d639708df9b4e2cc847b38d510149d19ec78 |
|
22-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged branch haiku/branches/developer/bonefish/vm into trunk. This introduces the following relevant changes: * VMCache: - Renamed vm_cache to VMCache, merged it with vm_store and made it a C++ class with virtual methods (replacing the store operations). Turned the different store implementations into subclasses. - Introduced MergeStore() callback, changed semantics of Commit(). - Changed locking and referencing semantics. A reference can only be acquired/released with the cache locked. An unreferenced cache is deleted and a mergeable cache merged when it is unlocked. This removes the "busy" state of a cache and simplifies the page fault code. * Added VMAnonymousCache, which will implement swap support (work by Zhao Shuai). It is not integrated and used yet, though. * Enabled the mutex/recursive lock holder asserts. * Fixed DoublyLinkedList::Swap(). * Generalized the low memory handler to a low resource handler. And made semaphores and reserved memory handled resources. Made vm_try_resource_memory() optionally wait (with timeout), and used that feature to reserve memory for areas. ... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26572 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
541959e00aa2b8b1a9314c54f8ee152a3b93136a |
|
17-Jul-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Add (not really necessary) locking of the sMountMutex in case of KDEBUG to keep the assert in find_mount() happy. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26484 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
60f2ef17be7b98a2a30b95e6a7a33a2bde8e17e5 |
|
12-Jul-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added "partition_id partition" field to fs_volume, so that file systems can get the partition they reside on easily. * Updated TODO. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26401 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
92c3ae2b69a016d7d51a3a1f487db72820489236 |
|
06-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Reverted r26293 again, as that "subtle" change also prevented any device I/O from happening... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26294 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
bed8516accd200d631e927343b17c02ea2f8854f |
|
06-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* file_{read|write}() now only accept regular files, and will return either B_BAD_VALUE or B_IS_A_DIRECTORY depending on the vnode type. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26293 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
469c26e73880c5da6d98e50460b6789fe89a35a9 |
|
06-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Since we now have a vnode::type field, several calls of read_stat() were no longer necessary. * Optimized file_seek() using this field, too; reading the stat is now only done when necessary. * file_read() and file_write() will now return B_IS_A_DIRECTORY so that not every file system has to care about that particular error code. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26292 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
52ecda6ecfe4c9710969c0ece73e267bb4702df9 |
|
06-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added some optional KDL command and statistics to the file map implementation. * Turned them on for now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26291 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a8f9741c8c2815234e87b78167738057b976b537 |
|
04-Jul-2008 |
Michael Lotz <mmlr@mlotz.ch> |
* Removed -Wno-unused from all KernelMergeObjects in kernel Jamfiles. * Fixed most of the warnings resulting from that by removing actually not used variables or moving declaration into the #IF. Left unused functions there though, as I wouldn't know if they are supposed to be used again. * Fixed two statements with no effect (clamping to MAX_ANCILLARY_DATA_LEN in socket.cpp and unsetting fCounterSem in MessagingService.cpp). * Some style cleanups. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26253 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e1b630c55d9d0c25aef812efc9c2410f5ba53456 |
|
28-Jun-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Replaced the global cache pages hash table by an IteratableSplayTree per cache. * Changed the strategy vm_cache_acquire_page_cache_ref() uses to ensure that the cache isn't deleted while trying to get a reference. Instead of the global cache pages hash table lock, it holds the global cache list lock now. We acquire + release this lock in delete_cache() after removing all pages and just before deleting the object. * Some small optimizations using the property that the cache's pages are ordered, now (vm_cache_resize(), vm_page_write_modified_page_range(), vm_page_schedule_write_page_range()). * Replaced some code counting a cache's pages by simply using vm_cache::page_count. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26160 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
285b754fa76b51ebda5df7f3757a77d282ffd04f |
|
24-Jun-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* dec_vnode_ref_count() can now also directly free the vnode if requested (and if it isn't used anymore). * vnode_low_memory_handler() now just calls it this way, so it doesn't have to use two passes anymore, and can always write back vnodes without having the busy flag set. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26124 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f5b3a6a7968b849c8cb3d06ffe6d19acccf910a8 |
|
05-Jun-2008 |
Michael Lotz <mmlr@mlotz.ch> |
* Initialize all static mutexes in the kernel through a MUTEX_INITIALIZER() and remove the then unneeded mutex_init() for them. * Remove the workaround for allowing uninitialized mutexes on kernel startup. As they are all initialized statically through the MUTEX_INITIALIZER() now this is not needed anymore. * An uninitialized mutex will now cause a panic when used to find possibly remaining cases. * Remove now unnecessary driver_settings_init_post_sem() function. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25812 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
032f1e5f90adbf6b08f83d746a19d440b01180a5 |
|
01-Jun-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed an endless loop when using vfs_get_vnode_name() or the "wrong" get_vnode_name() variant. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25750 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3cec30848cffa7709d0373f2053e4dc8467fea29 |
|
30-May-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Fix build with TRACE_VFS enabled and also fix a warning. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25726 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b0f5179aa51eb680cdeea656a8b11fdbc6b56d63 |
|
28-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Changed recursive_lock to use a mutex instead of a semaphore. * Adjusted code using recursive locks respectively. The initialization cannot fail anymore, and it is possible to use recursive locks in the early boot process (even uninitialized, if in BSS), which simplifies things a little. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25687 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1e18692e122a93b77376365bb5eff71bea765c84 |
|
26-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* get_vnode() now accepts a NULL parameter for the fsNode argument. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25660 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c44fb2a62c7ed7a6eea933260af3a32dfe87e51f |
|
09-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Advisory locking fixes: * Made the access strategy to vnode::advisory_locking consistent. get_advisory_locking() was guarding it with sVnodeMutex, create_advisory_locking() was using atomic_pointer_test_and_set(), and release_advisory_lock() just set it unguardedly. We do use sVnodeMutex consequently, now. * Beautified create_advisory_locking() (got rid of the gotos, reorganized the control flow). * Fixed race conditions in acquire_advisory_lock(). It was always unlocking and relocking the advisory_locking object when it didn't have to wait, but in the meantime someone else could have changed the locking situation. Reorganized the control flow, so that it only drops the lock when it has to fail or wait. Using create_advisory_locking() upfront simplifies the code quite a bit (and fixes another race condition). APR's testprocmutex test seems happy now, at least. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25407 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
adf376c941e3af8381aa890be77a2c6f66795639 |
|
08-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Replaced benaphores with mutexes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25378 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0c615a01ae49634aaf59fbe35b3d55b3bb8890df |
|
01-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Removed old mutex implementation and renamed cutex to mutex. * Trivial adjustments of code using mutexes. Mostly removing the mutex_init() return value check. * Added mutex_lock_threads_locked(), which is called with the threads spinlock being held. The spinlock is released while waiting, of course. This function is useful in cases where the existence of the mutex object is ensured by holding the threads spinlock. * Changed the two instances in the VFS code where an IO context of another team needs to be locked to use mutex_lock_threads_locked(). Before it required a semaphore-based mutex implementation. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25283 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
503912f7334fcae435933c024ba2b413a61903ad |
|
30-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fixed the case that a file to be created non-exclusively is a symlink (bug #2183). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25271 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
24280972976f3e70bd4357b646a3647e1c4fa131 |
|
29-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Removed superfluous uint32 ref parameter from select() FS hook. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25268 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b1d749f8f1d17830c8f24d49a21cdba1e174a0b0 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added an atomic.h header that provides a C++ file with a templatized 64-bit safe version of atomic_test_and_set() for pointers: atomic_pointer_test_and_set(). * The VFS is now using this function (it's not used anywhere else in the kernel this way). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25260 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
bbc25eb65048ae278bb2a955e8e86353ecff9a27 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Renamed temporary KDL variable from _cookie to _volume in the "mount" command. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25251 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f8a2f7ce58808a6c1f31c9c1231c50580d236d60 |
|
25-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* attribute dirs shouldn't be locked out either; I've inverted the type check, so that it now only checks for the type that allow locking. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25168 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d81dcabe8edda69c379e99c6917bd75f44dff1e9 |
|
25-Apr-2008 |
Bruno G. Albuquerque <bga@bug-br.org.br> |
FS gurus, please review. - get_new_fd() now checks if we are dealing with attributes before deciding to bail out on a locked vnode. - Enabled locking in MailSettings again as it now works. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25162 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0951fcb4a3c14b8f25ba751c300cda08216f5e12 |
|
24-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
vfs_create_special_node() always tried to create the node in "/". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25139 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3118b3a7cbf56fb77ab7ceb02eae609a664c6d6f |
|
11-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added fd_ops::set_flags() hook. It's only implemented by socket FDs ATM. * Changed common_fcntl() to also work for non-vnode-based FDs. Only the operations that require a vnode do fail now. F_SETFL uses the new fd_ops::set_flags() if available, falling back to the vnode respective operation. * Changed some direct accesses to file_descriptor::u::vnode. It was safe in those cases, but might not be anymore if we ever change fd_vnode(). ftp can at least connect to servers again, now, but apparently we still have a problem with syscall restarts -- downloads fail after one second, when the timer goes off. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24917 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ac0e5c1ce5073978eb18ad75c112b6b9b4749ce7 |
|
11-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
The fs_sync() function (or any other, for that matter) must not hold the sMountMutex lock when calling sync() on a file system. This fixes a potential deadlock (I just encountered for the first time). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24915 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9493edbe9f0597da4585c2d9494976642d36de97 |
|
11-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Applied patch by Christian Fasshauer: * get_dir_path_and_leaf() now removes trailing slashes from the path. * This fixes bug #2016, thanks! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24913 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0fc6c43728b4223095fe258b32156fcacbfd6deb |
|
10-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Resolved TODO: We can check for sockets, now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24906 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f8b4d83f2f310c288d3ba32c6371fb00ae2b4824 |
|
09-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
New service function vfs_create_special_node() to create special nodes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24883 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
037f70947f14b7e7d452543ad645f38d7c96f6eb |
|
09-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Cleaned up KernelExport.h completely, removed deprecated and non implemented API, uses the _PRINTFLIKE macro where appropriate. * Got rid of the "qent" structure, struct timer now contains everything we need. This makes the affected code in sem.cpp, signal.cpp, and timer.c much cleaner, and resolves a few TODOs. * Minor cleanup in vfs.cpp. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24871 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fc380199455ea67c8ed9b65b34e20b91133cfbb9 |
|
06-Apr-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Rename vfs_stat_entry_ref() to vfs_stat_node_ref() as that's what a dev_t and ino_t combination really is. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24825 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6e36a49e62cbad57eb5c88dd1a16ca39be3f4e3f |
|
05-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added _kern_create_pipe() syscall, creating a pipe as an entryless FIFO. Reimplemented pipe() to use it. * pipefs is no longer mounted. Will remove the superfluous code soon. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24823 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
717705d81694d6cfdece53fd6a2396422e32938c |
|
05-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
We get a reference to the node from create_special_node(), so we have to release it. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24817 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7ffafac8d76aa50ea68667e61038022220a90256 |
|
05-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Reorganized the FS interface a little: - Moved most file_system_module_info hooks into separate structures. Those that operate on mounted volumes to fs_volume_ops, those operating on a vnode to fs_vnode_ops. - Got rid of the fs_volume, fs_cookie, fs_vnode typedefs. We use void* again. - Instead of a void* volume and node cookie hooks are passed a fs_volume and fs_vnode structure pointer, which contain the cookie and an ops pointer (fs_volume a few more things). - The VFS {new,publish,get,...}_vnode() functions take a fs_volume* instead of the volume ID. So does vfs_get_fs_node_from_path(). - Added type and flags arguments to publish_vnode() and the get_vnode() hook and removed the type argument from lookup() hook. Added vnode::type using formerly unused bits to store the node type. Simplified a few things in the VFS due to the now always available node type. - Added fs_volume_ops::{create,delete}_sub_vnode() and fs_vnode_ops::get_super_vnode() hooks. They are used to support file system layers, e.g. allowing to extend an FS not supporting BeOS attribute with attribute support. Needs some more work in the VFS. - Added fs_vnode_ops::create_special_node() hook for creating special nodes (e.g. FIFOs). * Adjusted the built-in file systems and BFS according to the interface changes. Removed all other FSs from the image for the time being. We'll see whether further API changes are necessary before porting them. * Adjusted the bfs_shell accordingly. * Implemented create_special_node() in rootfs to support special nodes. * Added support for FIFOs: - Added syscall _kern_create_fifo() (used by mkfifo()), which creates a special node (type S_IFIFO) in the respective file system. - When a special node is published the VFS creates a respective sub node. Currently only FIFOs are supported. - Added a little support for FIFO subnodes by using functionality from the pipefs. - Added mkfifo to the image. It can create FIFOs in the rootfs, but the FIFOs aren't really usable ATM, since they still work like pipes, i.e. readers and writers need to have them open at the same time. * Some smaller changes in the VFS: - Made the *_CALL macros nicer to use (vargs). - Refactored FS entry lookup into new function lookup_dir_entry(). - create_vnode() no longer just calls the FS create() hook. First it looks up the entry and uses open_vnode(), if it already exists. This is necessary for two reasons: 1) The FS might not support create() while still allowing to open() entries. 2) When the FS has other layers on to of it (or the respective node) it might not be responsible for opening the node. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24816 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
efb965d5596e99bc2d3bd0cb6c7ee6c4a81a2637 |
|
05-Apr-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Introduce vfs_stat_entry_ref() that allows to stat a vnode based on a dev_t and ino_t instead of a path. Supposed to work with node monitoring messages. Took the name from vfs_entry_ref_to_path() that takes the same arguments, but suggestions for a better name are welcome. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24813 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
de73100825d330c9be828c508dd64d4d31cb6a2e |
|
01-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Also check whether the supplied vnode is a directory, if there's only one path component. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24736 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0cc0b6fc8f3451e7e793980e2a3035675805ade8 |
|
01-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Fixed resolution of symlinks path components, broken since r24721/r24722. After resolving a symlink we weren't updating the local type variable to the type of the link target, so that the directory check in the next iteration would always fail. * Added TODO. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24735 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b987779d7f78748a257ede83116c7f121eebd5df |
|
01-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Revised my previous patch as outlined in the previous one: * No longer checks for the path delimiter twice. * Now also checks if the first part of the path is a directory. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24722 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6800e4f8ba370bc79df266a086200a1474ecb581 |
|
01-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Reverted r24720, and at least fixed the problematic return code after the first loop - the vnode passed in would still need to be checked, though. Eventually, it would be nice to move the check to the top, though, so that we don't need to search for the patch delimiter twice. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24721 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b48c7f231ad09efc25d71a18a824f5bfa09618a4 |
|
01-Apr-2008 |
Bruno G. Albuquerque <bga@bug-br.org.br> |
- vnode_path_to_vnode() now returns B_NOT_A_DIRECTORY instead of B_NOT_ALLOWED as expected by POSIX programs. This allowed be to compile Haiku under itself without any hacks at all, so I guess this means that now we are officially self-hosting! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24720 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
360be1fc45416df27312c38d2268b466621bbae7 |
|
29-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Implemented support for chroot: - Added a "root" vnode to the io_context. It is used for resolving paths and converting nodes to paths instead of sRoot. Some more passing around of io_context structures was necessary. - Introduced a new lock sIOContextRootLock to protect io_context::root. The current uses of io_context::io_mutex (put_vnode(), remove_vnode() while holding it) looked too suspicious to use that mutex in vnode_path_to_vnode(). - Added _kern_change_root() syscall and chroot() libroot function. - Added chroot coreutils program to the image. Funnily it seems to be much easier to set up a little jail than under Linux (just copy bash and libroot.so into respective subdirs; mount another pipefs if you want pipe support). With Haiku allowing direct access to directories via inode IDs jailing is obviously not very secure at the moment. - Added /var/empty to the image. It will be the chroot target for ssh. * Changed vfs.cpp:get_cwd() so that the io_context::io_mutex is no longer held when calling dir_vnode_to_path(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24673 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8c117a6d887caefe7aacdddb08bb6557d100f106 |
|
29-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added function vfs_read_stat() that also allows for stat()ing files in the user IO context from within the kernel. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24667 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9e79133f4d76f11f86241a0e841c03e1487f3c6c |
|
27-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Reverted r22315 as far as free_vnode() is concerned: removing the vnode from the hash before putting it caused all sorts of problems. * For example, BFS would trim its preallocations when the vnode is put; if someone would read that same vnode after it had been removed, but before BFS could trim it, it would read the old vnode which still seemed to own the blocks which would subsequently be freed. * This fixes bug #1914, and should also fix bug #1956. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24607 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e9d948ce2df288e048f88f344025957bc80ff1c3 |
|
18-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* entry_ref_to_vnode() now gets a "traverse" argument, so that it is able to resolve symlinks. * file_open_entry_ref() now evaluates the openMode and passes the correct "traverse" argument to entry_ref_to_vnode(). This fixes bug #1932 (symlink refs wouldn't be resolved). * dir_open_entry_ref() now always resolves symlinks, all other uses of entry_ref_to_vnode() keep their previous behaviour, though. * Fixed warnings; since Ingo's header changes, NULL now causes a warning when it is used as int. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24442 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1b32947d3f6c19dc1716a27d50361dcf59c27882 |
|
17-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Aligned the semantics of the read_symlink() FS module hook with the readlink() function. It is no longer required to null-terminate the string, shall not fail, if the buffer is too small, and shall return the length of the string actually written into the buffer. * Adjusted rootfs, devfs, and bfs accordingly. Also adjusted their read_stat() hooks to return the correct symlink length in st_size. * Our readlink() does now comply to the standard (and BeOS). Additionally if the buffer is big enough it is nice to non-conforming apps and null-terminates it. * BSymLink::ReadLink() explicitly null-terminates the string now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24425 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f542307a9887b9cc5c2a6c0e6aa8c9795ebdce45 |
|
09-Mar-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
We didn't copy the close-on-exec flags on fork(), thus always leaving all FDs in a fork()+exec()ed child open. Makes Perl test t/run/cloexec.t pass. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24336 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3f89bce410469ee2c3c7f65f47423c5671ed43d2 |
|
09-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* The module code now uses find_directory() and no hard-coded paths anymore. * It now also supports the common directory path. * search_module() checked the module paths in the wrong order, ie. it preferred modules in the system directory over the user directory. * Clarified comment in vfs_get_module_path(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24323 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fa28330bbf9d39c01ad3016a777bedaa5960eedb |
|
09-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Explained under which circumstances vnode_path_to_vnode() will clobber the buffer of the provided "path" argument. * Applied patch by Vasilis to fix some warnings when build on Linux (missing const on certain functions). We should probably fix the original {add|remove}_debugger_command() functions in Haiku as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24322 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
daa6f66e11da97a634ee103f74e742da9c4a5f78 |
|
04-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24236 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0c415f6265d58c8cf07307e6742e4b42a64f2eee |
|
27-Feb-2008 |
Axel Dörfler <axeld@pinc-software.de> |
"leaf" may be NULL, fixed crashing bug I introduced with vfs_entry_ref_to_path(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24154 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4f26630d823fe7367a7ba80563779546204de671 |
|
27-Feb-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Factored a vfs_entry_ref_to_path() out of _user_entry_ref_to_path() and made it public (within the kernel). * _user_entry_ref_to_path() is now using that function. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24151 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
849246ba7741fbf9f8b59ea76013917205094e69 |
|
19-Feb-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Improved (and tested) the advisory file locking mechanism a bit: * our flock::l_len was inclusive, while it's exclusive (the last byte locked is (l_start - 1 + l_len) not just (l_start + l_len). * F_UNLCK removes all locks of the calling process that are within the specified region - existing locks might also cut or divided. * Apparently, a single team can lock the same region as often as it wants. * advisory_locking is now using a DoublyLinkedList instead of its C counterpart. * advisory_lock now has start + end fields, instead of offset + len, it's handier this way. * This fixes bug #1791. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24020 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4048494ce44a925d3d1e40e4ffb9abe670b4b827 |
|
17-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: * Implemented automatic syscall restarts: - A syscall can indicate that it has been interrupted and can be restarted by setting a respective bit in thread::flags. It can store parameters it wants to be preserved for the restart in thread::syscall_restart::parameters. Another thread::flags bit indicates whether it has been restarted. - handle_signals() clears the restart flag, if the handled signal has a handler function installed and SA_RESTART is not set. Another thread flag (THREAD_FLAGS_DONT_RESTART_SYSCALL) can prevent syscalls from being restarted, even if they could be (not used yet, but we might want to use it in resume_thread(), so that we stay behaviorally compatible with BeOS). - The architecture specific syscall handler restarts the syscall, if the restart flag is set. Implemented for x86 only. - Added some support functions in the private <syscall_restart.h> to simplify the syscall restart code in the syscalls. - Adjusted all syscalls that can potentially be restarted accordingly. - _user_ioctl() sets new thread flag THREAD_FLAGS_IOCTL_SYSCALL while calling the underlying FS's/driver's hook, so that syscall restarts can also be supported there. * thread_at_kernel_exit() invokes handle_signals() in a loop now, as long as the latter indicates that the thread shall be suspended, so that after waking up signals received in the meantime will be handled before the thread returns to userland. Adjusted handle_signals() accordingly -- when encountering a suspending signal we don't check for further signals. * Fixed sigsuspend(): Suspending the thread and rescheduling doesn't result in the correct behavior. Instead we employ a temporary condition variable and interruptably wait on it. The POSIX test suite test passes, now. * Made the switch_sem[_etc]() behavior on interruption consistent. Depending on when the signal arrived (before the call or when already waiting) the first semaphore would or wouldn't be released. Now we consistently release it. * Refactored _user_{read,write}[v]() syscalls. Use a common function for either pair. The iovec version doesn't fail anymore, if anything could be read/written at all. It also checks whether a complete vector could be read/written, so that we won't skip data, if the underlying FS/driver couldn't read/write more ATM. * Some refactoring in the x86 syscall handler: The int 99 and sysenter handlers use a common subroutine to avoid code duplication. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23983 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4af8877673574aa1b9d4150fc7addbc2d2f019a1 |
|
17-Feb-2008 |
Marcus Overhagen <marcusoverhagen@gmail.com> |
build fix for r23929 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23982 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9ae93dcd7fa2b673f5f6c8e5488a547350fe3e2f |
|
17-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
_user_normalize_path() was broken for symlinks in absolute paths. Fixes #1778. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23969 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2c986936dfb7ff4f5723641b100d280a44dda479 |
|
07-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added new syscall _kern_normalize_path() to normalize a path. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23929 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a32a4683ff8eb994524d5ab8eba13d93fe90c0ff |
|
03-Feb-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Implemented flock() semantics to the advisory locking backend. Not tested (must also compare to BSD; I've looked at their sources, but I might have missed something). * Added sys/file.h and the flock() system call. * common_fcntl() could forget to put back the file descriptor on some error conditions (I guess we should introduce and use a DescriptorGetter class). * Cleaned up fcntl.h, moved the BSD extensions S_IREAD and S_IWRITE to sys/stat.h where they belong, and added the missing S_IEXEC to them. * Added some more comments. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23836 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
731262c6dd0752b72ee2353d678edde643bf9daf |
|
21-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Rethought fs_sync(): since we no longer deadlock when calling vm_cache_write_modified() here anymore since quite some time, it actually doesn't make any sense to call the file system's "fsync" method here. This should make syncing all file systems much faster when many vnodes are in use. * If a file system doesn't use the file cache, it can still just sync everything it needs to in its "sync" method. * Added a TODO item on how to improve sync speed further, if necessary. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23679 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b9074efcb78d914f902047cc8410532d42ce7bbb |
|
16-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed the "vnodes" KDL command when called without any arguments. * Fixed the usage text of the "help" KDL command. * Made the "ambiguous command" warning shorter, so that it will still fit in the exception buffer. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23565 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
dd80f32ac37f32193ff302a2358eb003acb8d51a |
|
16-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added support for the "--help" argument for all VFS debugger commands. * Added some temporary variables to the commands. * Use parse_expression() where appropriate. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23556 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2eceeabaea5b72d200067b7d25e610c29ee329ea |
|
12-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Fix comment. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23466 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0fc976d9003f9e61913cf2eb648dfd59bc1e9b41 |
|
12-Jan-2008 |
Ithamar R. Adema <ithamar.adema@team-embedded.nl> |
Fix problem with CLOEXEC also being handled on fork(). For details on expected (BeOS) behaviour, see http://www.freelists.org/archives/openbeos/12-2001/msg00280.html git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23456 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f3ecf93d37877f5c7bf4f4298ed011ae84e86e89 |
|
12-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Added the cookie/private_node fields to the mounts/vnodes list in KDL. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23455 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a52c1759ac6f899186a557ba6ae0f27468a3ad8b |
|
12-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed two bugs in the vnode disconnecting code found by bonefish+mmlr: * vfs_disconnect_vnode() did not put away its vnode reference. * disconnect_mount_or_vnode_fds() did always throw the current working directory of all apps on the same mount away, even if only a specific vnode should have been disconnected. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23445 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
34b3b26b3b8c46ba46ddde037b10dd173f4936d6 |
|
10-Jan-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged branch haiku/branches/developer/bonefish/optimization revision 23139 into trunk, with roughly the following changes (for details svn log the branch): * The int 99 syscall handler is now fully in assembly. * Added a sysenter/sysexit handler and use it on Pentiums that support it (via commpage). * Got rid of i386_handle_trap(). A bit of functionality was moved into the assembly handler which now uses a jump table to call C functions handling the respective interrupt. * Some optimizations to get user debugger support code out of the interrupt handling path. * Introduced a thread::flags fields which allows to skip handling of rare events (signals, user debug enabling/disabling) on the common interrupt handling path. * Got rid of the explicit iframe stack. The iframes can still be retrieved by iterating through the stack frames. * Made the commpage an architecture independent feature. It's used for the real time data stuff (instead of creating a separate area). * The x86 CPU modules can now provide processor optimized versions for common functions (currently memcpy() only). They are used in the kernel and are provided to the userland via commpage entries. * Introduced build system feature allowing easy use of C structure member offsets in assembly code. Changes after merging: * Fixed merge conflict in src/system/kernel/arch/x86/arch_debug.cpp (caused by refactoring and introduction of "call" debugger command). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23370 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4accd841c7331a6674a4c5db4d9b2686d7eb8bac |
|
06-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed a big bug in common_file_io_vec_pages(): vecOffset was not correctly set when the first chunk of the file could be read in directly, causing it to read data to a wrong place in the buffer. * Reading in the first chunk directly would have also only worked if vecIndex and vecOffset was 0 when calling the function. * Applied the fs_shell changes in file_map to the kernel version as well (the constructor already worked correctly, though). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23265 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fb431b443bca48124de6b4d921fa16cac07e7ec0 |
|
13-Nov-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* vfs_unmount() can now safely be called from the kernel (fs_unmount() still tried to access the uninitialized vnode in that case). * That means that it's now safe to remove a mounted CD from the drive, it will then be unmounted automatically. * Added a check for partition::Device() - even though Ingo tells me it's impossible, it was NULL once. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22922 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6e122bd99ec62ea5bf4adbcfebb4a28f8b604e28 |
|
12-Nov-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: Missed those changes in the previous commit: * Added vfs_unmount(), which allows unmounting by dev_t (used by the DDM). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22910 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3d268eda3d0ca504c865533347decf27b54025b6 |
|
10-Nov-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Extracted file_map API out of the file cache - it's now an optional service that can be used by file systems. * Changed the way the file cache works: instead of reading/writing to the underlying device directly, it can now be used for any data source, ie. also network file systems. * As a result, the former pages_io() moved to the VFS layer, and can now be called by a file system via {read|write}_file_io_vec_pages() (naming suggestions are always welcomed :-)). It now gets an FD, and uses that to communicate with the device (via its fs_{read|write}_pages() hooks). * The file_cache_{read|write}() functions must now be called without holding an I/O relevant file system lock. That allows the file cache to prepare the pages without colliding with the page writer, IOW the "mayBlock" flag can go into the attic again (yay!). * This also results in a much better performance when the system does I/O and is low on memory, as the page writer can now finally write back some pages, and that even without maxing out the CPU :) * The API changes put slightly more burden on the fs_{read|write}_pages() hooks, but in combination with the file_map it's still pretty straight forward. It just will have to dispatch the call to the underlying device directly, usually it will just call its fs_{read|write}_pages() hooks via the above mentioned calls. * Ported BFS and FAT to the new API, the latter has not been tested, though. * Also ported the API changes to the fs_shell. I also completely removed its file cache level page handling - the downside is that device access is no longer cached (ie. depends on the host OS now), the upside is that the code is greatly simplified. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22886 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
53715fe060e108eb46185d16a710bce4f0cbaa61 |
|
01-Nov-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Got rid of the B_PARTITION_DESCENDANT_BUSY flag. * Added CheckAndMarkBusy() and UnmarkBusy() methods to KPartition. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22801 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8354dac78e2ce5da2e5ee1826c37dbc12cacbd18 |
|
01-Nov-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Folded KPhysicalPartition into KPartition. Removed the notion of shadow partitions from the disk device manager. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22800 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
327887959e06348e47b1aa0965f3679e2576dba8 |
|
01-Nov-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Moved partition scanning back to KDiskDeviceManager. ATM only synchronous scanning is supported. * Removed the disk device job support from the disk device manager. * K{Disk,File,Partitioning}System: - Remove querying and validation methods. - Commented out the modification methods until their fate is decided. * Removed obsolete _user_get_partitionable_spaces(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22799 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
45ae0aa1aadb1067c55e7402f2beec4d3ef8dc18 |
|
23-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
It's not a good idea to write back large files while keeping the vnode busy. The low memory handler now has two passes which should help there; however, it might also accidently remove recently used vnodes, too. We could mark the clean ones in some way if that turns out to be a problem. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22678 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0710d59c1c6edace8ad333b1e3e86f9931e4e3f0 |
|
08-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Added a "canWait" argument to vfs_get_vnode() - you can use this to ignore busy vnodes. * dir_create_entry_ref() used get_vnode() incorrectly (and could therefore potentially prevent a file system from doing proper locking when called from the kernel). * The vnode_store now uses this for its acquire_unreferenced_ref() implementation (and therefore for the page writer). * read_into_cache() and write_to_cache() were still marked inline. * The system will now wait 10 secs for a busy vnode before returning an error. * It will also no longer panic in that case. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22485 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0b7582a306ebaf22e7e5ed44f6930b24478d6dec |
|
07-Oct-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Some types of files cannot be seeked and we need to fail in those cases. We actually need to fail for sockets, too, but until I'm mistaken, we can't identify them in the VFS. Fixes bug #1539. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22480 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
80f54692912d728f5780e9d78d7643828edaaa2a |
|
06-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* struct vnode is an opaque type now, removed void* where it was used incorrectly. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22461 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
570263197eb178eba5f042054229c07c3fe74e64 |
|
05-Oct-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Reviewed checking of empty paths and fixed some occurrences. Thanks to mjw for the hint. Fixes bug #1516. * Changed _{kern,user}_create_symlink() to no longer check the supplied link string. BeOS seems to do that, but this is not standard conforming. The previous implementation even used the path processed by check_path(), which would potentially have appended a ".". * Some style cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22451 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3e9513aa4a8bf5f2fb2b86a767ffe46f6e626acc |
|
03-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* fs_{write|read}_pages() now has an additional argument "mayBlock". * the page writer don't allow to block, while all other writers do. This fixes bug #1509. The reason the page writer needs this is because it marks several pages from different caches as busy. * Fixed a warning about ASSERT being defined already in BFS, since util/DoublyLinkedList.h now includes debug.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22434 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
636bfc08aeaaa7f1bab813c5aa2e8e666b40ec64 |
|
02-Oct-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed fs/vfs_select.cpp to wait_for_objects.cpp and got rid of vfs_select.h, respectively moved most of it into the new kernel private header wait_for_objects.h. * Added new experimental API functions wait_for_objects[_etc](). They work pretty much like poll(), but also for semaphores, ports, and threads. * Removed the "ref" parameter from notify_select_events() and the select_sync_pool functions as well as from fd_ops::fd_[de]select(). It is no longer needed. The FS interface select() hook still has it, though -- the VFS will always pass 0. * de]select_fd() take a select_info* instead of a select_sync* + ref pair, now. Added respective functions for semaphores, ports, and threads. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22416 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
66c03dc3a92b84f0320b1c350238396cdf203cc7 |
|
30-Sep-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* fd.c -> fd.cpp * Reworked the select support: - The io_context additionally stores a table of lists of select_infos, which enables it to deselect events of a pending select() when closing a FD. This prevents a race condition potentially causing a write to stale memory. - The opaque selectsync* passed to FSs is now actually a select_info*. This was necessary, since the FDs deselect() hook (unlike the select() hook) doesn't take a "ref" argument and deselecting a single info (e.g. caused by a premature close()) was not possible. The select() hook's "ref" argument has become superfluous. - It should now be relatively easy to implement a poll_on_steroids() that can also wait for objects other than FDs (e.g. semaphores, ports, threads etc.). * Set/reset the signal mask in common_select(). This makes pselect() work as required. * Reorganized vfs_resize_fd_table(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22391 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3392e9bcd6178db96dd433fc50544f961b90f816 |
|
29-Sep-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Added some more debug output. * Cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22375 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6d4aea47962e0ea08b81327fbbf93b32ae821177 |
|
25-Sep-2007 |
Axel Dörfler <axeld@pinc-software.de> |
bonefish+axeld: * Removed the vm_cache/vm_store ref_count duality that besides being a bit ugly also created the page dameon cache retrieval problem: now, only areas (and cache consumers) retrieve a reference to the store (and therefore, the vnode). The page daemon doesn't need to care about this at all anymore, and the pseudo references of the vm_cache could be removed again. * Rearranged deletion of vnodes such that its ID can be reused directly after fs_remove_vnode() has been called. * vm_page_allocate_page() no longer panics when it runs out of pages, but just waits for new pages to become available using the new sFreeCondition condition variable - to make sure this happens in an acceptable time frame, it'll trigger a run of the low memory handlers. * Implemented a page_thief() that steals inactive pages from caches and puts them into the free queue. It runs as a low memory handler. * The file cache now sets the usage count on the pages it inserts into the cache (needs some rework though, cache_io() doesn't do it yet). * Instead of panicking, the kernel will currently dead lock in low memory situations, since BFS does a bit too much in bfs_release_vnode(). * Some minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22315 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8687956af2ed154458d42f7c6a7ea7c8f7dee17a |
|
09-Sep-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added a clarifying comment to free_vnode() and prevented the vnode reference count to drop below 0 there. * Added TODO describing a serious race condition between free_vnode() and the page daemon. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22209 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
62454aae669ee5458ef7077c3a858c094d0d68fb |
|
08-Sep-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fixed get_mount(). It must also acquire the vnode lock before trying to increment the root node vnode reference count. Otherwise it could race with fs_unmount(). Fixes bug #1438. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22203 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
43ab7500cc2e4c74cf474133b08e2975c53c00c1 |
|
08-Sep-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Some cleanup. Fixed gcc 4 warning. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22202 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d1dc70fa5fd827aa28c7bf03b5ca8014676bd365 |
|
05-Aug-2007 |
Marcus Overhagen <marcusoverhagen@gmail.com> |
FD_CLOEXEC is a flag, other bits may be set git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21829 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
58f6e8e5e4aeee797ecd3bb7bed17d5a3a2029c0 |
|
17-Jul-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Merged vm_cache_ref and vm_cache to a single structure (Axel & Ingo). * Renamed vm_cache.c to vm_cache.cpp git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21642 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
bd1877933fad61fd08982d3b8bcc63181a081b6f |
|
14-Jul-2007 |
Axel Dörfler <axeld@pinc-software.de> |
remove_vnode() will now return an error code if the vnode to be removed did not exist. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21614 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
25f46ea449ca29e08bef64ef93eb5d5b117d7e2f |
|
30-Jun-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Reserving areas never put down their reference of their address space when removed in several cases. * vfs_get_vnode_cache() now always gives out a reference to the cache it returns; if it needs to allocate a new one, the vnode owns one reference, and the caller another. * therefore, file_cache_create() now owns a reference to its vm_cache_ref, and frees it in file_cache_delete(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21533 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
245aecda8ac43fc2c0c0bac6a7e4016efa9b71e1 |
|
21-Jun-2007 |
Axel Dörfler <axeld@pinc-software.de> |
Got rid of vnode_id and mount_id, replaced with ino_t and dev_t. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21485 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f415aa28bec600badf82c80494ce38d9647ab2ad |
|
28-May-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* create_vnode() now panicks when it could not find the freshly created vnode in the vnode hash; that's a bug in the FS that shouldn't be ignored that way. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21262 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b5f602a702ffe76c51c6e392b8c4f7c70040110c |
|
27-May-2007 |
Jérôme Duval <korli@users.berlios.de> |
added a missing newline, dunno why this message is displayed :) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21250 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1e768ed1d33e21faabb52b3b80d49a0027ac745b |
|
02-Apr-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
get_vnode_name(): * read_dir() is supposed to return B_OK and and a count of 0 when reaching the end of the directory. In case the node in question could not be found, we were looping infinitely. * free_dir_cookie() was not invoked. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20519 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6376aa3f7aedc3b315b6ab0307fc3f14f72e814c |
|
23-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* The close-on-exit bitmap vfs_new_io_context() created was a byte short, if the FD table size wasn't a multiple of 8. * vfs_resize_fd_table() didn't seem to know at all about the close-on-exit bitmap. The pointer in the io_context would point to free()d memory afterwards. This explains the sporadically closed stdin/out/err descriptors in programs started from Tracker and Deskbar. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20413 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
cf4ccd6575bb584d54921cf42a173ee9046696ef |
|
04-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Renamed the FS interface hook read_link() to read_symlink(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20330 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
12d359b85a22246a568569b09b6587534e98aacc |
|
04-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Removed write_link from the FS module interface. Adjusted all FS add-ons accordingly and removed the syscall. * Removed send_notification(). * Reimplemented notify_listener(). It used the unimplemented send_notification(). Now it has a chance to work. Note that notify_listener() is obsolete. I would already have removed it, if there weren't lots of FS implementations still using it (Hint!). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20329 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
348be5b50b94292ec72fe6b0dd743c428f388a9f |
|
02-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced the new static lock sVnodeCoveredByMutex to guard the vnode::covered_by fields. Together with sMountOpLock it allows write access, either lock alone suffices for read access. Before sMountOpLock had to be acquired for read (and write) access, which meant that while mounting/unmounting a FS path resolution would have to wait. In case of the UserlandFS this would even cause a deadlock while mounting if the client tried to resolve the path of the device to be mounted (e.g. by opening it). * Added a clarifying comment about read access to the fs_mount::covers_vnode/root_vnode field and removed locking in resolve_volume_root_to_mount_point() which was not necessary for explained reasons. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20308 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2f742879c89a2e69a907ca8b419253ec51162a4a |
|
02-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Changed get_vnode_name() to take a dirent* parameter instead of the name (saves copying the name, if that has to be done anyway) and added a wrapper version with the old interface. * dir_vnode_to_path() was broken for file systems that didn't support the get_vnode_name() hook. It resolved the mount point too early, so that it was searching the mount point and not the FS root dir for the node. It uses the get_vnode_name() function now (before resolving the mount point). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20305 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9481e62bdbacde8797ed4ab1f1208fc7ba786a7c |
|
01-Mar-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
is_vnode_removed() is now known as get_vnode_removed() and returns its answer through a reference parameter. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20297 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6d3667845fc9d55ff3ab2aa21cfd7f8e0a006d58 |
|
28-Feb-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Be nicer to FSs and fill in the known part of the fs_info *after* the FS had its go. BeOS does the same. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20262 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
223bba10f3cd044b904fa91cc0271d34faaf700b |
|
28-Feb-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Resurrected is_vnode_removed(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20256 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c926cb8d8a7084caa0cfe59838160200fee1c57d |
|
19-Feb-2007 |
François Revol <revol@free.fr> |
Return sensible errors instead of -1. Added some TODO comments. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20166 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c8d3c6f470e287e6712272fd03490c8b7b5e5208 |
|
19-Feb-2007 |
François Revol <revol@free.fr> |
Implemented get/setrlimit(RLIMIT_NOVMON). Note the kernel calls don't set errno... but they're called by user versions. Might want to split them if needed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20165 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
793f542244051f787b5e54c35452892c2bb8a6f3 |
|
30-Aug-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Added a comment about the outcome of a potential problem. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18717 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c40fe37f0b9ed23d499abfbb4dbc51ae282bba1b |
|
30-Aug-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* Reverted the changes r17693 made to vfs_get_vnode_cache(); instead, vm_create_vnode_cache() will now grab a reference to the vnode as well if successful. This way, vfs_get_vnode_cache() now actually works how it should: it will now always grab a reference to the cache and its underlying vnode. This removes an extra reference to the vnode (and vm_cache) that got ignored before and prevented volumes to be unmounted (or file caches to be removed). Thanks to Korli for pointing this out. * file_cache_create() is now aware of that extra vnode reference and releases it; unmounting volumes is now working again as it should. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18716 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
355efe3ec181844d50e35ce0c9799ed10a6689b6 |
|
24-Aug-2006 |
Jérôme Duval <korli@users.berlios.de> |
improve debug command vnode_cache: it now accepts a device arg git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18618 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0ba0370464602e792dd23b08ac6e0c8a3e9f7ad4 |
|
21-Jun-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Use B_MAX_SYMLINKS instead of SYMLINKS_MAX (which also fixes the build, btw). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17900 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8265e1210cefdff2a0553dc2a0696bb3cb2396bf |
|
02-Jun-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Implemented mandatory file locking, BeOS style. BNode::Lock() and BNode::Unlock() are now working as expected. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17697 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
acac7c6834809fa3626c3c27dda7ef398419acd9 |
|
01-Jun-2006 |
Axel Dörfler <axeld@pinc-software.de> |
_vm_map_file() did in fact not work correctly, but the main problem was vfs_get_vnode_cache() which did not acquire an extra reference to the cache_ref when the cache had to be created. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17693 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
20914efdcf7ef2591fb62f787758dae9696a7ac7 |
|
25-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Made _user_open_entry_ref() a bit more relaxed and return B_BAD_VALUE on some obvious errors. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17586 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4b25b1b99a456b052e8b490e3c60e882238aed49 |
|
19-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
common_lock_node() now pretends to be successful - this should fix Vision not being able to store its settings for now (bug #589). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17505 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3cb039fffa0cf6f88f44d0a4c847d2660d69d89a |
|
05-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
When you try to mount a file image, BFS now only sees the normalized path instead of the one supplied to fs_mount() (but not the /dev/disk/virtual/... entry, as that wouldn't be that clear to the user). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17335 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
65bd831cbbb39791cefba28f9a343cbe0c7210fe |
|
05-May-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* KDiskDeviceManager::_ScanPartition() can now run synchronously (and execute the scan job in the calling thread). * KDiskDeviceManager::InitialDeviceScan() now runs synchronously, so that get_boot_partitions() doesn't need to do this ugly wait hack. * KDiskDeviceManager::CreateFileDevice() can now run synchronously as well, which fixes a deadlock in fs_mount() - note, mounting file devices still doesn't work, though as Haiku's BFS doesn't allow this right now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17334 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4827dbe47a1ae3d3153ca6ec5bfe86b7febd1506 |
|
18-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed a bug in the VFS that could cause BFS to corrupt an inode: dir_remove() did not normalize the path, and thus, could forward a "." as name for the removed directory - which BFS didn't catch because it assumed our VFS would work correctly... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17165 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a88c592fb33512b5744cf1211e69902971fa27d5 |
|
18-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Instead of ending up in an endless loop, fs_sync() will now bail out in case get_vnode() fails. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17162 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fde87a10942ccc17f45ee7264a6907d16e6914e1 |
|
18-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Instead of waiting forever, get_vnode() will now fail after 3 seconds if the vnode is not becoming unbusy (right now it even panics, but that can be removed later on). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17161 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b2536cb5d660bb11e93f98d2c45637535e02da28 |
|
16-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed bug #483: * vfs_get_fs_node_from_path() now also work for absolute paths again (but still for relative ones from the volume root) - it just tests if the mount IDs fit, so it only returns successful if the path really is on the desired mount. * the Disk Device Manager publish functions now call devfs_publish_*() correctly (by omitting the "/dev/" mount point). * devfs_publish_partition() now accepts absolute device paths but relative partition paths. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17138 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9a11448fbde0b9467623a3874095cd71cc2631a1 |
|
13-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
vfs_get_fs_node_from_path() didn't work correctly and ignored the mount_id (ie. it only worked for absolute paths, but it shouldn't work for those at all). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17127 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
97e069713b80839b9dd5441b9f4d37d891b452d8 |
|
12-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Added a "reenter" parameter to the {read|write}_pages() functions to give file systems a chance to know if they have locked already. This fixes a locking problem in BFS where one thread tried to acquire two read locks (where someone else trying to acquire a write lock would have caused a dead lock). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17108 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
675c19c9cffae598092f7df48b9725d9a3d03650 |
|
10-Apr-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* fs_sync() and free_vnode() now use the file system's fsync() hook to write back changes made to a file instead of directly using vm_cache_write_modified() - besides making the file system more independent from the file cache, this also works around a possible dead lock (that is to be fixed in a later commit). * fs_sync() no longer uses vnodes from the mount's vnode list directly to write back the changes made to them, but gets them via ID instead - this makes sure the vnode is in a valid state and fixes a race condition with free_vnode(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17059 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
606e0d364e0c814450efb2ba37bd216d6a1241fc |
|
27-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* Factored out the vnode disconnection code from fs_unmount() to a separate function, and added a vfs_disconnect_vnode() for other kernel components. * devfs_unpublish_device() can now optionally make use of this call. * Fixed the type check of devfs' unpublish_node(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16907 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
33dd85501fcd44f8bbba908790b12d3e3124f5e1 |
|
14-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16784 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
abb84c7d51dcaaeacc7a3a0f75404f18b10167a6 |
|
08-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Removing the nodes from the unused list in fs_unmount() had the side effect that the root vnode was tried to be removed as well (which resulted in a crash). Since playing with the root node reference count is a bad idea anyway and opens a big race condition (with regards to the unused list), we no longer do that now, until it's safe. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16665 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f951ca0e6a0cf852e1daa7e6c282f12bae77789d |
|
08-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed a couple of bugs: * fs_unmount() freed vnodes, but didn't remove them from the unused list if needed. * vfs_get_module_path() could put a vnode twice under several situations. * vnode_path_to_vnode() now always puts the dir vnode, even if the provided path is NULL. Documented the fact that it does eat the ref, too. * Added a to-do item in vfs_get_vnode_cache() about a possible problem. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16662 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
311bcf391fac2b8037a78756d630e1ddf91254c7 |
|
07-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed a possible deadlock I've introduced earlier (since create_sem() calls vfs_free_unused_vnodes()); the vnode mutex is now hold for much shorter times only: * Rewrote advisory_locking creation/maintenance to hold the vnode mutex only for very short times. * the vnode mutex is no longer held during file cache construction; instead, the vnode is marked busy. * Implemented an (incorrect for now) get_advisory_lock() git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16635 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9f6376a0c752eb965d97c400eb3bb27dbc102775 |
|
06-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* get_vnode() did not decrease the sUnusedVnodes counter when taking one node of that list. * Added a vfs_free_unused_vnodes() function that calls the low memory handler directly. * create_sem_etc() now calls the above function in case there are no semaphores available anymore; this usually frees up to 2 semaphores per node (one from the cache if there is a file cache attached, and eventually one from the file system). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16610 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d98d96e9e502c22e8bd53bc92abdff21f7d92a65 |
|
06-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Added debugger command that dumps info about the vnode usage. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16607 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0254f09df28c131c21f24116b74477cdf5f9de3b |
|
05-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
It's not so problematic if a busy vnode was released; what is problematic is if that was the last ref. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16590 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0d4c16e0c08ba45ee32177fae63fdeb5b71b52a1 |
|
05-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* Reduced the stack usage of most of the I/O paths - there were several places that put one or more full paths on the stack before, which could cause some problems under certain conditions. * Cleaned up KPath, ie. use size_t instead of int32 where appropriate, added license. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16585 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
bb674499f8713cb5a125c7718c3d108f8f440b04 |
|
03-Mar-2006 |
Axel Dörfler <axeld@pinc-software.de> |
* Finally implemented B_WATCH_MOUNT, ie. Tracker now shows newly mounted volumes (mounting still only works from the Terminal). * Shuffled functions in node_monitor.cpp around to clearly differentiate between private, private kernel, and public kernel functions. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16575 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3ea7d1fcbe15d798f9891c3b8a547bd049de3709 |
|
27-Feb-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Minor cleanup, now returns B_NAME_TOO_LONG if the query string or mount parameters were longer than 64k. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16527 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5a2ad00cab1adde7fe59540ca5ef692c7e83b3a3 |
|
20-Feb-2006 |
Jérôme Duval <korli@users.berlios.de> |
fix a TODO in _user_mount : added an argsLength parameter git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16480 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
979aeaf71cf0c238793ee9a49d91997342ce5fdb |
|
25-Jan-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed bug #97: * BEntry::Remove() now uses _kern_remove_dir() for directories. * Added fd parameter to _kern_remove_dir(). * Fixed LibBeAdapter's _kern_unlink() to only work on files, and added _kern_remove_dir() for directories. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16078 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7817211a381481da6f6b13303cbb4dfbf5df5a08 |
|
16-Jan-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Allow only root to look at other team's file descriptors. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15992 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0e382a46670b2bfa5317d2c6a350c1cb6f99aa42 |
|
16-Jan-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Implemented a syscall to get information about the open file descriptors of all teams. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15991 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ddb7d0b6a64f423f3d39992eacfb5e13e7a94e7b |
|
15-Jan-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Implemented force unmounting - by passing the "-f" option to "unmount" you can now safely unmount volumes that are still in use by some applications. Minor fixes to the FD disconnection implementation: * put_fd() checked the condition for being able to disconnect a descriptor incorrectly (causing the FD to never be disconnected). * remove_fd() would hand out disconnected descriptors (but should have returned NULL for them). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15952 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
16cfe613cd3028d520f728ff2efba253f558da82 |
|
21-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed vfs_lookup_vnode() - it's not called with the mutex already locked anymore. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15647 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ea2cd27e57272fe016f285c1762252da775ddfc2 |
|
21-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed the strange vm_cache_ref reference count mechanism: now, a fresh vm_cache_ref starts with a reference count of 1. When acquiring a vm_cache, you no longer need to worry if that should go through the vm_store, or not; as it now always does. * map_backing_store() no longer needs to play with the vm_cache_ref references. * that simplified some code. * vfs_get_vnode_cache() now grabs a reference to the cache, if successful. * better balanced vnode ownership on vnode_store creation (vnode_store released the vnode before if its creation failed). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15641 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
89f5f72a150519ca74bb3a82a40cefc2954a6acf |
|
16-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
* Added debug output to vm_low_memory.cpp. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15568 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d0d37bdfd170587307c6f64678b739e69341dd69 |
|
16-Dec-2005 |
Axel Dörfler <axeld@pinc-software.de> |
* vfs_init() is now called later in the startup sequence - since no core kernel service depends on it, it doesn't make any sense to call it that early in the game. * The VFS now has a low memory handler for vnodes as well. If there is enough memory left, it won't free any vnodes anymore. * Potential crashing bug fix: some functions did not check if the FD passed in belonged to the right type; they just assumed it had a valid vnode, but it could have had a mount structure associated as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15566 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
04cd47db5920f3d3a23c523dafd07ceae5e51c2d |
|
10-Nov-2005 |
Axel Dörfler <axeld@pinc-software.de> |
common_access() now follows the same logic as traversing paths: if the file system doesn't export the fs_access() function, it assumes access is granted. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14816 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7121425eb599ad42f6e070d4edd8b879ba75748d |
|
20-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Turns out we could remove a mount point... Under BeOS remove_vnode() is failing in this case, which looks like a good idea to imitate. Also, pipefs/rootfs didn't handle that case - they even removed the entry before calling remove_vnode() - they now behave correctly. And also BFS now returns the actual error code received from remove_vnode() instead of B_ERROR. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14456 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2db3fced5f119bb3f7c8b8a3ac3fe60190f76e6c |
|
17-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Moved vfs_bootstrap_file_systems() and vfs_mount_boot_file_system() out of vfs.cpp and into its own file vfs_boot.cpp. Added basic support for booting from CD - it doesn't give CDs a higher priority, so you could end up booting from HD when you didn't explicetly select "CD-ROM" in the boot loader. Eventually, it should only boot from HD in this case, if booting from CD failed (because of a missing boot partition or whatever). fs_mount(), _kern_mount(), and _user_mount() will now return the dev_t of the mounted device, and not just B_OK. Maybe we should have fs_unmount() work on a dev_t instead of a path as well... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14403 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9a63d903970648f924ab2a70bc92761d2ea31a03 |
|
06-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Added kernel private VFS functions vfs_entry_ref_to_vnode() and vfs_vnode_to_node_ref(). Minor cleanup of vfs.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14314 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
681779f1c8f009c46030c12878e588bc2443d353 |
|
06-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Our close-on-exec flag handling was broken: it's supposed to be specified per slot, not per file descriptor (a descriptor can be shared among several slots). There is now a second table in the io_context structure that contains that information in a bitmap. There are now two new (private) functions to control the close-on-exec flag, fd_close_on_exec(), and fd_set_close_on_exec(). F_DUPFD, dup(), and dup2() are supposed to clear the close-on-exec flag on the duplicated slot - this fixes bug #57 (no output after a redirect of a shell builtin). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14313 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1670b8f596897bfe1b4e55b73d0a9e8acfebf801 |
|
06-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
num_used_fds counting was broken for dup2() and vfs_new_io_context() when it was used with a parent context. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14311 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e8d4a05d8beb7065a1929a1cf07e63a69f9f9e42 |
|
06-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed the "iocontext" command to "io_context" to match the structure name. It now also accepts a team ID and will then dump its io_context. Accidently mixed used/max FD counter. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14310 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
333735e881af0dd107dbd11f94ba5d2db3dc5f83 |
|
05-Oct-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Added a new debugger command "iocontext" that prints out info about the kernel's I/O context (or a specified one) including its FDs. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14304 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f10cba9aec9f17134d5922e0a9b244b358ac9bbe |
|
22-Sep-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Changed get_mount() to return a status code instead of just the mount or NULL. Some fields of fs_mount were not properly initialized when FS's mount function was called, and therefore, could let get_mount() return a mount structure that was not yet read for public consumption (this should fix bug #51). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14223 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
47a54bea537dbe733209005d80334716d137a31a |
|
28-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Rootfs now starts with 1 for the first inode ID. Instead of -1, vnode_path_to_vnode() now returns the ID of the starting vnode when it doesn't need to traverse the path at all. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14081 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7b285866ffd4fbf1069a31917f8c923ad2ac45fd |
|
25-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed hash functions: when the key was lower than 0 (could happen with entry_refs and node_refs passed in) they returned an invalid index (larger than range). Fixed rootfs compilation with tracing turned on. Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14065 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e0481f928ec4346f39d72ee5951330448e7d5234 |
|
21-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Now marks a partition unmounted on unmount - that allows a volume to be remounted as often as you like. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14036 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5b14757a30be0b805e2688cdc5341177f2d703fb |
|
20-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
We now have a consistent scheme what the file system should do with its root node: like in BeOS, it *must* own the root node (ie. via publish_vnode()), unlike in BeOS, it must also drop that reference on unmount (symmetrical behaviour definitely makes more sense to me than the Be way). Since all existing file systems for Haiku behaved differently, I brought them in line (only pipefs already adhered to that new standard for some reason, rootfs did only released the node, devfs did nothing - despite it's probably not really useful to be able to unmount them). fs_mount() will now panic if a file system does not do this correctly (useful for file system developing). Unmounting is now theoretically working again: when trying to unmount a BFS volume, the kernel crashes in the block cache destruction... (but that's work for tomorrow). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14017 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e8e4accd16d85239f29fefb2fe4ee7f65da117dd |
|
18-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Add some useful debugger commands to the VFS layer for dumping a vnode, an fs_mount, and the mounts/vnodes list. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13971 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7964c56d67bb6283a76db7f540f1a807173556ec |
|
09-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Added vfs_get_cwd() call to get the mount_id and vnode_id of the current working directory (instead of the full path). Cleanup of some remaining "int" status variables (where it should have been a "status_t"). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13924 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
eab435cd59a30d144ecc077fbdbc1bb37b3eb5a6 |
|
05-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
vfs_get_vnode_cache() now only allocates a new cache if requested: this prevents the system to allocate caches for files that don't use or have a file cache (ie. only those can be mmap()ed!). Therefore, cache_prefetch() no longer crashes when trying to prefetch files without a file cache. read_into_cache() no longer does anything if the requested size is 0. Fixed a bug in cache_prefetch_vnode(): if the cache couldn't be retrieved, it put the vnode, but didn't own it (the caller does). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13904 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
95839f5c9276596236cd5b6658465e588e2811e0 |
|
03-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
The file cache now has another init method that is called after the boot device becomes available. Currently, it opens the "launch_speedup" module (if available), later it should consult a settings file for what to do. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13894 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c50cfe23dd4850e5dad3eba17f2ec9c9d38cf210 |
|
02-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed crashing bug in remove_vnode(): it freed the vnode, but it didn't remove it from the hash, and thus, left a dead pointer around. free_vnode() does now also remove the vnode from the hash - this is done so that the file system is notified about removal/put of the vnode before there is a chance that this vnode is recreated/reloaded (could make the life of file system writers a bit easier). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13877 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b72cf2601fbc931d2b3224e285eb26d09b20ea5e |
|
01-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed vfs_vnode_acquire_ref() to vnode_acquire_vnode(). Removed vfs_vnode_release_ref(), as vfs_put_vnode() already does the same thing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13867 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b7d8ef5a0d83bbf8f8d642e00d36db65f3407b3f |
|
01-Aug-2005 |
Axel Dörfler <axeld@pinc-software.de> |
The term vnode_ptr is not used anywhere else; renamed vfs_put_vnode_ptr() to vfs_put_vnode(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13865 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9882caaadd59685d38312cd1c45fe377c7c68366 |
|
31-Jul-2005 |
Axel Dörfler <axeld@pinc-software.de> |
The path resolving functions can now also fill in the ID of the parent directory. This is currently only used for the file cache module API. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13862 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
54476a21b570f9b6d38d0a500606e2fd5e121001 |
|
12-Jul-2005 |
Axel Dörfler <axeld@pinc-software.de> |
file_create() now also supports FD relative path specifications. This was the cause for some apps to put their settings files to the current directory, and also that Tracker did not find some icons (from the icons it installed in the MIME database). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13645 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ada5975312c5edd41aa14d34f167df3ac02aa2e8 |
|
23-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
fs_mount() and get_file_system() can now both handle file system names in the form "bfs" and "file_systems/bfs/v1". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12791 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
47f39c93cbd7db06e72642b047f1fc327852684c |
|
23-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Merged the disk device manager module interface for file systems with the VFS's interface, so that a file system only has to implement one interface. As a side effect, the automatic file system detection may now work (not yet tested, though). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12786 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d5b04e50f8eca76ce5e6690dc8873861fa978de0 |
|
13-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
First step into a new block allocation strategy for the block_cache (right now, it's still malloc/free, just encapsulated in an allocator class). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12662 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6bdc405f759e30aa253635ab76a565747f3d2306 |
|
12-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Whenever KPath is used, it will now be tested if it could be initialized (thanks to Ingo for the reminder...). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12652 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
cbd1d9977f62c3f1eca8dd75a20aead47a0ae0e8 |
|
11-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Changed all _kern_*() calls to use KPath instead of a path buffer on the stack. This reduces the stack usage quite a lot, and since file system calls could be nested (for example, a mounted image on a volume), definitely a must, too. Might be a good idea for user calls, too, though, although it's not urgent. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12636 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0953c83ebd428b1d46312d00684d33558fa3fb89 |
|
02-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed another bug: after a partition had been mounted, it was only marked mounted, but no one told it about its volume ID - that caused "mountvolume" not to be able to return a valid mount point. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12548 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
47729f044c76e7b7e87c2bbf6eeb3c3af9033461 |
|
02-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Fixed a possible bug in path_to_vnode(): if called before a root file system has been mounted, it would have crashed (that for example happened if you deleted the kernel settings file...). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12547 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2d690920ac4d0cd27eb3c118fb2b0862615869e0 |
|
13-Apr-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed system/core to system/kernel. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12360 a95241bf-73f2-0310-859d-f6bbb57e9c96
|