|
PatchworkOS
|
Directory entry structure. More...
#include <dentry.h>
Public Member Functions | |
| _Atomic (dentry_flags_t) flags | |
Data Fields | |
| ref_t | ref |
| dentry_id_t | id |
| char | name [MAX_NAME] |
| inode_t * | inode |
| dentry_t * | parent |
| list_entry_t | siblingEntry |
| list_t | children |
| mutex_t | childrenMutex |
| superblock_t * | superblock |
| const dentry_ops_t * | ops |
| void * | private |
| map_entry_t | mapEntry |
| atomic_uint64_t | mountCount |
| dentry_t::_Atomic | ( | dentry_flags_t | ) |
| list_t dentry_t::children |
Definition at line 90 of file dentry.h.
Referenced by dentry_free(), dentry_generic_getdents(), dentry_make_positive(), dentry_new(), getdents_recursive_traversal(), and ramfs_remove().
| mutex_t dentry_t::childrenMutex |
Definition at line 91 of file dentry.h.
Referenced by dentry_free(), dentry_generic_getdents(), dentry_make_positive(), dentry_new(), and getdents_recursive_traversal().
| dentry_id_t dentry_t::id |
Definition at line 85 of file dentry.h.
Referenced by dentry_new(), namespace_bind(), namespace_mount(), namespace_traverse_mount(), vfs_add_dentry(), vfs_get_dentry(), vfs_get_or_lookup_dentry(), and vfs_remove_dentry().
| inode_t* dentry_t::inode |
Definition at line 87 of file dentry.h.
Referenced by acpi_table_read(), dentry_free(), dentry_generic_getdents(), dentry_make_positive(), dentry_new(), fb_buffer_mmap(), fb_info_read(), file_free(), file_generic_seek(), file_new(), getdents_recursive_traversal(), kbd_events_poll(), kbd_events_read(), kbd_name_read(), mouse_events_poll(), mouse_events_read(), mouse_name_read(), process_file_get_process(), ramfs_link(), ramfs_read(), ramfs_remove(), ramfs_remove_file(), ramfs_write(), socket_accept_open(), socket_ctl_bind(), socket_ctl_connect(), socket_ctl_listen(), socket_data_open(), socket_factory_open(), vfs_create(), vfs_ctx_set_cwd(), vfs_get_or_lookup_dentry(), vfs_getdents(), vfs_ioctl(), vfs_link(), vfs_mmap(), vfs_open(), vfs_open2(), vfs_open_lookup(), vfs_poll(), vfs_read(), vfs_remove(), vfs_stat(), and vfs_write().
| map_entry_t dentry_t::mapEntry |
Definition at line 95 of file dentry.h.
Referenced by dentry_new(), and vfs_add_dentry().
| atomic_uint64_t dentry_t::mountCount |
The number of mounts on this dentry.
If greater then 0 and a mountpoint mounted here is in a accessible namespace, we can traverse from this dentry to the root dentry of the mounted filesystem.
The difference between a mountpoint dentry and a root dentry can be a bit confusing, so here is a quick explanation. When a filesystem is mounted the dentry that it gets mounted to becomes a mountpoint, any data that was there before becomes hidden and when we traverse to that dentry we "jump" over to the root dentry of the mounted filesystem. The root dentry of the mounted filesystem is simply the root directory of that filesystem.
This means that the mountpoint does not "become" the root of the mounted filesystem, it simply points to it.
Finally, note that just becouse a dentry is a mountpoint does not mean that it can be traversed by the current process, a process can only traverse a mountpoint if it is visible in its namespace, if its not visible the dentry acts exactly like a normal dentry.
Definition at line 114 of file dentry.h.
Referenced by dentry_dec_mount_count(), dentry_inc_mount_count(), dentry_new(), path_walk(), and path_walk_single_step().
| char dentry_t::name[MAX_NAME] |
Definition at line 86 of file dentry.h.
Referenced by dentry_generic_getdents(), dentry_new(), getdents_recursive_traversal(), path_to_name(), ram_disk_load_file(), ramfs_load_dir(), vfs_add_dentry(), vfs_remove_dentry(), and vfs_stat().
| const dentry_ops_t* dentry_t::ops |
Definition at line 93 of file dentry.h.
Referenced by dentry_free(), dentry_new(), file_free(), file_new(), vfs_getdents(), vfs_ioctl(), vfs_mmap(), vfs_open(), vfs_poll(), vfs_read(), vfs_seek(), and vfs_write().
| dentry_t* dentry_t::parent |
Definition at line 88 of file dentry.h.
Referenced by dentry_free(), dentry_generic_getdents(), dentry_make_positive(), dentry_new(), path_handle_dotdot(), path_to_name(), vfs_add_dentry(), vfs_getdents(), and vfs_remove_dentry().
| void* dentry_t::private |
Definition at line 94 of file dentry.h.
Referenced by dentry_new(), file_new(), pipe_close(), pipe_open(), pipe_poll(), pipe_read(), pipe_write(), ramfs_dentry_deinit(), shmem_close(), shmem_mmap(), shmem_open(), socket_accept_close(), socket_accept_open(), socket_data_close(), socket_data_open(), socket_data_poll(), socket_data_read(), socket_data_write(), socket_factory_close(), socket_factory_open(), and socket_factory_read().
| ref_t dentry_t::ref |
Definition at line 84 of file dentry.h.
Referenced by dentry_new(), file_new(), and vfs_get_dentry_internal().
| list_entry_t dentry_t::siblingEntry |
Definition at line 89 of file dentry.h.
Referenced by dentry_free(), dentry_make_positive(), and dentry_new().
| superblock_t* dentry_t::superblock |
Definition at line 92 of file dentry.h.
Referenced by dentry_new(), namespace_bind(), namespace_mount(), ramfs_dentry_deinit(), sysfs_dir_new(), sysfs_file_new(), sysfs_mount_new(), vfs_get_or_lookup_dentry(), and vfs_link().