From 95e62e6a9808c576d6610d2b1762f8bc7b348b2f Mon Sep 17 00:00:00 2001 From: Antonio SJ Musumeci Date: Sat, 25 Oct 2025 18:21:18 -0500 Subject: [PATCH] node.cpp --- libfuse/Makefile | 6 +- .../{fuse_lowlevel.h => fuse_lowlevel.hpp} | 2 +- libfuse/include/{fuse_req.h => fuse_req.hpp} | 3 + libfuse/lib/buffer.c | 2 +- libfuse/lib/fuse.cpp | 15 +---- libfuse/lib/fuse_i.h | 2 +- libfuse/lib/fuse_loop.cpp | 2 +- .../lib/{fuse_session.c => fuse_session.cpp} | 8 +-- .../lib/{fuse_signals.c => fuse_signals.cpp} | 2 +- libfuse/lib/{helper.c => helper.cpp} | 6 +- libfuse/lib/{mount.c => mount.cpp} | 0 libfuse/lib/mount_generic.c | 10 +-- libfuse/lib/node.cpp | 61 ++++++------------- libfuse/lib/node.hpp | 8 +-- 14 files changed, 43 insertions(+), 84 deletions(-) rename libfuse/include/{fuse_lowlevel.h => fuse_lowlevel.hpp} (99%) rename libfuse/include/{fuse_req.h => fuse_req.hpp} (78%) rename libfuse/lib/{fuse_session.c => fuse_session.cpp} (91%) rename libfuse/lib/{fuse_signals.c => fuse_signals.cpp} (98%) rename libfuse/lib/{helper.c => helper.cpp} (98%) rename libfuse/lib/{mount.c => mount.cpp} (100%) diff --git a/libfuse/Makefile b/libfuse/Makefile index 45e198b1..71b90abb 100644 --- a/libfuse/Makefile +++ b/libfuse/Makefile @@ -62,11 +62,7 @@ BUILDDIR := build SRC_C = \ lib/buffer.c \ lib/crc32b.c \ - lib/fuse_opt.c \ - lib/fuse_session.c \ - lib/fuse_signals.c \ - lib/helper.c \ - lib/mount.c + lib/fuse_opt.c SRC_CXX = $(wildcard lib/*.cpp) OBJS := $(SRC_C:lib/%.c=$(BUILDDIR)/.objs/%.c.o) diff --git a/libfuse/include/fuse_lowlevel.h b/libfuse/include/fuse_lowlevel.hpp similarity index 99% rename from libfuse/include/fuse_lowlevel.h rename to libfuse/include/fuse_lowlevel.hpp index 40250096..340d8f3a 100644 --- a/libfuse/include/fuse_lowlevel.h +++ b/libfuse/include/fuse_lowlevel.hpp @@ -3,7 +3,7 @@ #include "extern_c.h" #include "fuse_common.h" #include "fuse_kernel.h" -#include "fuse_req.h" +#include "fuse_req.hpp" #include #include diff --git a/libfuse/include/fuse_req.h b/libfuse/include/fuse_req.hpp similarity index 78% rename from libfuse/include/fuse_req.h rename to libfuse/include/fuse_req.hpp index 1be68b0a..3f16c85c 100644 --- a/libfuse/include/fuse_req.h +++ b/libfuse/include/fuse_req.hpp @@ -13,3 +13,6 @@ struct fuse_req_t struct fuse_chan *ch; unsigned int ioctl_64bit : 1; }; + +fuse_req_t* fuse_req_alloc(); +void fuse_req_free(fuse_req_t *); diff --git a/libfuse/lib/buffer.c b/libfuse/lib/buffer.c index fea1bde4..2c1ea4ce 100644 --- a/libfuse/lib/buffer.c +++ b/libfuse/lib/buffer.c @@ -9,7 +9,7 @@ #define _GNU_SOURCE #include "fuse_i.h" -#include "fuse_lowlevel.h" +#include "fuse_lowlevel.hpp" #include #include #include diff --git a/libfuse/lib/fuse.cpp b/libfuse/lib/fuse.cpp index 554e7b9e..b0ab7c87 100644 --- a/libfuse/lib/fuse.cpp +++ b/libfuse/lib/fuse.cpp @@ -20,11 +20,11 @@ #include "node.hpp" #include "fuse_cfg.hpp" -#include "fuse_req.h" +#include "fuse_req.hpp" #include "fuse_dirents.hpp" #include "fuse_i.h" #include "fuse_kernel.h" -#include "fuse_lowlevel.h" +#include "fuse_lowlevel.hpp" #include "fuse_opt.h" #include "fuse_pollhandle.h" #include "fuse_msgbuf.hpp" @@ -3638,15 +3638,6 @@ metrics_log_nodes_info(FILE *file_) sizeof_node = sizeof(node_t); - lfmp_t *lfmp; - lfmp = node_lfmp(); - lfmp_lock(lfmp); - node_slab_count = fmp_slab_count(&lfmp->fmp); - node_usage_ratio = fmp_slab_usage_ratio(&lfmp->fmp); - node_avail_objs = fmp_avail_objs(&lfmp->fmp); - node_total_alloc_mem = fmp_total_allocated_memory(&lfmp->fmp); - lfmp_unlock(lfmp); - snprintf(buf,sizeof(buf), "time: %s\n" "sizeof(node): %" PRIu64 "\n" @@ -3763,7 +3754,6 @@ void fuse_gc() { SysLog::info("running thorough garbage collection"); - node_gc(); msgbuf_gc(); fuse_malloc_trim(); } @@ -3772,7 +3762,6 @@ void fuse_gc1() { SysLog::info("running basic garbage collection"); - node_gc1(); msgbuf_gc_10percent(); fuse_malloc_trim(); } diff --git a/libfuse/lib/fuse_i.h b/libfuse/lib/fuse_i.h index 9fe1692b..78b6d1b6 100644 --- a/libfuse/lib/fuse_i.h +++ b/libfuse/lib/fuse_i.h @@ -9,7 +9,7 @@ #pragma once #include "fuse.h" -#include "fuse_lowlevel.h" +#include "fuse_lowlevel.hpp" #include "fuse_msgbuf_t.h" #include "extern_c.h" diff --git a/libfuse/lib/fuse_loop.cpp b/libfuse/lib/fuse_loop.cpp index 599bd77f..92986caa 100644 --- a/libfuse/lib/fuse_loop.cpp +++ b/libfuse/lib/fuse_loop.cpp @@ -12,7 +12,7 @@ #include "fuse_i.h" #include "fuse_kernel.h" -#include "fuse_lowlevel.h" +#include "fuse_lowlevel.hpp" #include "fuse_cfg.hpp" #include "fuse_msgbuf.hpp" diff --git a/libfuse/lib/fuse_session.c b/libfuse/lib/fuse_session.cpp similarity index 91% rename from libfuse/lib/fuse_session.c rename to libfuse/lib/fuse_session.cpp index 32d357d6..b9c0460c 100644 --- a/libfuse/lib/fuse_session.c +++ b/libfuse/lib/fuse_session.cpp @@ -38,10 +38,10 @@ fuse_session_new(void *data, } memset(se, 0, sizeof(*se)); - se->f = data; - se->receive_buf = receive_buf; - se->process_buf = process_buf; - se->destroy = destroy; + se->f = (fuse_ll*)data; + se->receive_buf = (int(*)(fuse_session*,fuse_msgbuf_t*))receive_buf; + se->process_buf = (void(*)(fuse_session*,const fuse_msgbuf_t*))process_buf; + se->destroy = (void(*)(void*))destroy; return se; } diff --git a/libfuse/lib/fuse_signals.c b/libfuse/lib/fuse_signals.cpp similarity index 98% rename from libfuse/lib/fuse_signals.c rename to libfuse/lib/fuse_signals.cpp index ba9c70be..a4ff8f22 100644 --- a/libfuse/lib/fuse_signals.c +++ b/libfuse/lib/fuse_signals.cpp @@ -6,7 +6,7 @@ See the file COPYING.LIB */ -#include "fuse_lowlevel.h" +#include "fuse_lowlevel.hpp" #include #include diff --git a/libfuse/lib/helper.c b/libfuse/lib/helper.cpp similarity index 98% rename from libfuse/lib/helper.c rename to libfuse/lib/helper.cpp index 892e0650..b28a3853 100644 --- a/libfuse/lib/helper.c +++ b/libfuse/lib/helper.cpp @@ -8,7 +8,7 @@ #include "fuse_i.h" #include "fuse_opt.h" -#include "fuse_lowlevel.h" +#include "fuse_lowlevel.hpp" #include #include @@ -53,7 +53,7 @@ fuse_helper_opt_proc(void *data, int key, struct fuse_args *outargs) { - struct helper_opts *hopts = data; + struct helper_opts *hopts = (helper_opts*)data; switch (key) { @@ -282,7 +282,7 @@ fuse_setup_common(int argc, if (res == -1) goto err_unmount; - res = fuse_set_signal_handlers(fuse_get_session(fuse)); + res = fuse_set_signal_handlers(fuse_get_session()); if (res == -1) goto err_unmount; diff --git a/libfuse/lib/mount.c b/libfuse/lib/mount.cpp similarity index 100% rename from libfuse/lib/mount.c rename to libfuse/lib/mount.cpp diff --git a/libfuse/lib/mount_generic.c b/libfuse/lib/mount_generic.c index 79459a77..9c26058c 100644 --- a/libfuse/lib/mount_generic.c +++ b/libfuse/lib/mount_generic.c @@ -188,7 +188,7 @@ set_mount_flag(const char *s, static int fuse_mount_opt_proc(void *data, const char *arg, int key, struct fuse_args *outargs) { - struct mount_opts *mo = data; + struct mount_opts *mo = (mount_opts*)data; switch (key) { @@ -426,11 +426,11 @@ static int fuse_mount_sys(const char *mnt, struct mount_opts *mo, if (res == -1) goto out_close; - source = malloc((mo->fsname ? strlen(mo->fsname) : 0) + - (mo->subtype ? strlen(mo->subtype) : 0) + - strlen(devname) + 32); + source = (char*)malloc((mo->fsname ? strlen(mo->fsname) : 0) + + (mo->subtype ? strlen(mo->subtype) : 0) + + strlen(devname) + 32); - type = malloc((mo->subtype ? strlen(mo->subtype) : 0) + 32); + type = (char*)malloc((mo->subtype ? strlen(mo->subtype) : 0) + 32); if (!type || !source) { fprintf(stderr, "fuse: failed to allocate memory\n"); goto out_close; diff --git a/libfuse/lib/node.cpp b/libfuse/lib/node.cpp index fee37df1..c5088f2a 100644 --- a/libfuse/lib/node.cpp +++ b/libfuse/lib/node.cpp @@ -1,60 +1,35 @@ #include "node.hpp" -#include "lfmp.h" +#include +#include -static lfmp_t g_NODE_FMP; - -static -__attribute__((constructor)) -void -node_constructor() +struct stack_t { - lfmp_init(&g_NODE_FMP,sizeof(node_t),256); -} + stack_t *next; +}; -static -__attribute__((destructor)) -void -node_destructor() -{ - lfmp_destroy(&g_NODE_FMP); -} +thread_local static stack_t *g_stack = NULL; node_t* node_alloc() { - return (node_t*)lfmp_calloc(&g_NODE_FMP); -} + if(g_stack == NULL) + return (node_t*)calloc(1,sizeof(node_t)); -void -node_free(node_t *node_) -{ - lfmp_free(&g_NODE_FMP,node_); -} + node_t *node; -int -node_gc1() -{ - return lfmp_gc(&g_NODE_FMP); + node = (node_t*)g_stack; + g_stack = g_stack->next; + + return node; } void -node_gc() +node_free(node_t *node_) { - int rv; - int fails; - - fails = 0; - do - { - rv = node_gc1(); - if(rv == 0) - fails++; - } while(rv || (fails < 3)); -} + stack_t *stack; -lfmp_t* -node_lfmp() -{ - return &g_NODE_FMP; + stack = (stack_t*)node_; + stack->next = g_stack; + g_stack = stack; } diff --git a/libfuse/lib/node.hpp b/libfuse/lib/node.hpp index 73d7cb97..5493bf8b 100644 --- a/libfuse/lib/node.hpp +++ b/libfuse/lib/node.hpp @@ -1,10 +1,9 @@ #pragma once #include "lock.h" -#include "lfmp.h" -typedef struct node_s node_t; -struct node_s +typedef struct node_t node_t; +struct node_t { node_t *name_next; node_t *id_next; @@ -26,6 +25,3 @@ struct node_s node_t *node_alloc(); void node_free(node_t*); -int node_gc1(); -void node_gc(); -lfmp_t *node_lfmp();