Browse Source

checkpoint

debug-output
Antonio SJ Musumeci 2 years ago
parent
commit
031a72d7ad
  1. 2
      libfuse/lib/fuse.c
  2. 25
      libfuse/lib/fuse_msgbuf.cpp

2
libfuse/lib/fuse.c

@ -3829,7 +3829,7 @@ fuse_maintenance_loop(void *fuse_)
if(!f->conf.nogc && gc) if(!f->conf.nogc && gc)
{ {
gc = lfmp_gc(&f->node_fmp); gc = lfmp_gc(&f->node_fmp);
msgbuf_gc();
// msgbuf_gc();
} }
if(g_LOG_METRICS) if(g_LOG_METRICS)

25
libfuse/lib/fuse_msgbuf.cpp

@ -23,14 +23,14 @@
#include <cstdint> #include <cstdint>
#include <cstdlib> #include <cstdlib>
#include <mutex> #include <mutex>
#include <stack>
#include <vector>
static std::uint32_t g_PAGESIZE = 0; static std::uint32_t g_PAGESIZE = 0;
static std::uint32_t g_BUFSIZE = 0; static std::uint32_t g_BUFSIZE = 0;
static std::mutex g_MUTEX; static std::mutex g_MUTEX;
static std::stack<fuse_msgbuf_t*> g_MSGBUF_STACK;
static std::vector<fuse_msgbuf_t*> g_MSGBUF_STACK;
static static
__attribute__((constructor)) __attribute__((constructor))
@ -38,6 +38,7 @@ void
msgbuf_constructor() msgbuf_constructor()
{ {
g_PAGESIZE = sysconf(_SC_PAGESIZE); g_PAGESIZE = sysconf(_SC_PAGESIZE);
// +2 because to do O_DIRECT we need to offset the buffer to align
g_BUFSIZE = (g_PAGESIZE * (FUSE_MAX_MAX_PAGES + 2)); g_BUFSIZE = (g_PAGESIZE * (FUSE_MAX_MAX_PAGES + 2));
} }
@ -98,8 +99,8 @@ msgbuf_alloc()
} }
else else
{ {
msgbuf = g_MSGBUF_STACK.top();
g_MSGBUF_STACK.pop();
msgbuf = g_MSGBUF_STACK.back();
g_MSGBUF_STACK.pop_back();
} }
return msgbuf; return msgbuf;
@ -117,7 +118,7 @@ msgbuf_free(fuse_msgbuf_t *msgbuf_)
return; return;
} }
g_MSGBUF_STACK.push(msgbuf_);
g_MSGBUF_STACK.emplace_back(msgbuf_);
} }
uint64_t uint64_t
@ -131,15 +132,15 @@ msgbuf_alloc_count()
void void
msgbuf_gc() msgbuf_gc()
{ {
std::lock_guard<std::mutex> lck(g_MUTEX);
while(!g_MSGBUF_STACK.empty())
{
fuse_msgbuf_t *msgbuf;
std::vector<fuse_msgbuf_t*> oldstack;
msgbuf = g_MSGBUF_STACK.top();
g_MSGBUF_STACK.pop();
{
std::lock_guard<std::mutex> lck(g_MUTEX);
oldstack.swap(g_MSGBUF_STACK);
}
for(auto msgbuf: oldstack)
{
free(msgbuf->mem); free(msgbuf->mem);
free(msgbuf); free(msgbuf);
} }

Loading…
Cancel
Save