From 02c27583a539c4e8073509536d328581cf1ba346 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Sat, 27 Apr 2024 15:26:39 +0200 Subject: Kernel: Make file descriptor numbers reusable. Instead of using the "append only" list it now uses "relist" which allows for indexes to be removed. --- kernel/fs/vfs.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'kernel/fs/vfs.c') diff --git a/kernel/fs/vfs.c b/kernel/fs/vfs.c index 63db938..16f9186 100644 --- a/kernel/fs/vfs.c +++ b/kernel/fs/vfs.c @@ -18,7 +18,7 @@ vfs_fd_t *get_vfs_fd(int fd, process_t *p) { } vfs_fd_t *r; - if (!list_get(&p->file_descriptors, fd, (void **)&r)) { + if (!relist_get(&p->file_descriptors, fd, (void **)&r)) { return NULL; } return r; @@ -73,7 +73,7 @@ int vfs_create_fd(int flags, int mode, int is_tty, vfs_inode_t *inode, *fd = r; } int index; - list_add(¤t_task->file_descriptors, r, &index); + relist_add(¤t_task->file_descriptors, r, &index); return index; } @@ -294,7 +294,7 @@ int vfs_close_process(process_t *p, int fd) { assert(0 < fd_ptr->reference_count); // Remove process reference fd_ptr->reference_count--; - list_set(&p->file_descriptors, fd, NULL); + assert(relist_remove(&p->file_descriptors, fd)); // If no references left then free the contents if (0 == fd_ptr->reference_count) { if (fd_ptr->inode->close) { @@ -411,12 +411,12 @@ vfs_vm_object_t *vfs_get_vm_object(int fd, u64 length, u64 offset) { int vfs_dup2(int org_fd, int new_fd) { vfs_fd_t *orig; - if (!list_get(¤t_task->file_descriptors, org_fd, (void **)&orig)) { + if (!relist_get(¤t_task->file_descriptors, org_fd, (void **)&orig)) { assert(0); return -1; } assert(1 <= orig->reference_count); - if (!list_set(¤t_task->file_descriptors, new_fd, orig)) { + if (!relist_set(¤t_task->file_descriptors, new_fd, orig)) { assert(0); return -1; } -- cgit v1.2.3