|
|
@ -17,12 +17,11 @@ |
|
|
|
|
|
|
|
|
#include "fuse_msgbuf.hpp"
|
|
|
#include "fuse_msgbuf.hpp"
|
|
|
|
|
|
|
|
|
|
|
|
#include "fatal.hpp"
|
|
|
#include "fuse.h"
|
|
|
#include "fuse.h"
|
|
|
#include "fuse_kernel.h"
|
|
|
#include "fuse_kernel.h"
|
|
|
#include "objpool.hpp"
|
|
|
#include "objpool.hpp"
|
|
|
|
|
|
|
|
|
#include "fmt/core.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include <unistd.h>
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
|
#include <cassert>
|
|
|
#include <cassert>
|
|
|
@ -34,7 +33,7 @@ static u64 g_bufsize = 0; |
|
|
|
|
|
|
|
|
/* Extra pages: 1 for page-alignment headroom, 1 for
|
|
|
/* Extra pages: 1 for page-alignment headroom, 1 for
|
|
|
fuse_in_header+fuse_write_in alignment */ |
|
|
fuse_in_header+fuse_write_in alignment */ |
|
|
#define MSGBUF_OVERHEAD_PAGES 2
|
|
|
|
|
|
|
|
|
static constexpr u64 MSGBUF_OVERHEAD_PAGES = 2ULL; |
|
|
|
|
|
|
|
|
static |
|
|
static |
|
|
__attribute__((constructor)) |
|
|
__attribute__((constructor)) |
|
|
@ -43,7 +42,9 @@ _constructor() |
|
|
{ |
|
|
{ |
|
|
long pagesize = sysconf(_SC_PAGESIZE); |
|
|
long pagesize = sysconf(_SC_PAGESIZE); |
|
|
|
|
|
|
|
|
assert(pagesize > 0); |
|
|
|
|
|
|
|
|
if(pagesize <= 0) |
|
|
|
|
|
fatal::abort("pagesize query failed - {}",strerror(errno)); |
|
|
|
|
|
|
|
|
g_pagesize = pagesize; |
|
|
g_pagesize = pagesize; |
|
|
|
|
|
|
|
|
assert((sizeof(struct fuse_in_header) + sizeof(struct fuse_write_in)) |
|
|
assert((sizeof(struct fuse_in_header) + sizeof(struct fuse_write_in)) |
|
|
@ -57,9 +58,9 @@ struct PageAlignedAllocator |
|
|
void* |
|
|
void* |
|
|
allocate(size_t size_, size_t align_) |
|
|
allocate(size_t size_, size_t align_) |
|
|
{ |
|
|
{ |
|
|
void *buf = NULL; |
|
|
|
|
|
|
|
|
void *buf = nullptr; |
|
|
int rv = posix_memalign(&buf, align_, size_); |
|
|
int rv = posix_memalign(&buf, align_, size_); |
|
|
return (rv == 0) ? buf : NULL; |
|
|
|
|
|
|
|
|
return (rv == 0) ? buf : nullptr; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void |
|
|
void |
|
|
@ -131,6 +132,9 @@ msgbuf_alloc_page_aligned() |
|
|
void |
|
|
void |
|
|
msgbuf_free(fuse_msgbuf_t *msgbuf_) |
|
|
msgbuf_free(fuse_msgbuf_t *msgbuf_) |
|
|
{ |
|
|
{ |
|
|
|
|
|
if(msgbuf_ == nullptr) |
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
g_msgbuf_pool.free_size(msgbuf_,g_bufsize); |
|
|
g_msgbuf_pool.free_size(msgbuf_,g_bufsize); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|