Browse Source

More aggressive error handing with pagesize queries

Antonio SJ Musumeci 5 days ago
parent
commit
89c2ada323
  1. 6
      src/config_pagesize.cpp
  2. 6
      vendored/libfuse/lib/fuse_lowlevel.cpp
  3. 16
      vendored/libfuse/lib/fuse_msgbuf.cpp

6
src/config_pagesize.cpp

@ -18,6 +18,7 @@
#include "config_pagesize.hpp"
#include "fatal.hpp"
#include "from_string.hpp"
#include <cassert>
@ -58,10 +59,7 @@ ConfigPageSize::from_string(const std::string_view s_)
tmp = sysconf(_SC_PAGESIZE);
if(tmp <= 0)
{
perror("mergerfs: pagesize query failed");
std::abort();
}
fatal::abort("pagesize query failed - {}",strerror(errno));
pagesize = (u64)tmp;

6
vendored/libfuse/lib/fuse_lowlevel.cpp

@ -13,6 +13,8 @@
#include "mutex.hpp"
#include "debug.hpp"
#include "fatal.hpp"
#include "fmt/core.h"
#include "fuse_cfg.hpp"
#include "fuse_i.h"
#include "fuse_kernel.h"
@ -20,7 +22,6 @@
#include "fuse_opt.h"
#include "fuse_pollhandle.h"
#include "stat_utils.h"
#include "fmt/core.h"
#include <stdio.h>
#include <stdlib.h>
@ -62,9 +63,10 @@ void
fuse_ll_constructor(void)
{
pagesize = sysconf(_SC_PAGESIZE);
if(pagesize <= 0)
fatal::abort("pagesize query failed - {}",strerror(errno));
}
static
void
convert_stat(const struct stat *stbuf_,

16
vendored/libfuse/lib/fuse_msgbuf.cpp

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

Loading…
Cancel
Save