mirror of https://github.com/trapexit/mergerfs.git
Antonio SJ Musumeci
2 years ago
9 changed files with 302 additions and 155 deletions
-
3libfuse/Makefile
-
239libfuse/lib/fuse.c
-
3libfuse/lib/fuse_msgbuf.hpp
-
69libfuse/lib/fuse_signals.c
-
11libfuse/lib/lock.h
-
24libfuse/lib/node.h
-
63libfuse/lib/node_pool.c
-
26libfuse/lib/node_pool.h
-
19src/fuse_ioctl.cpp
@ -0,0 +1,11 @@ |
|||
#pragma once |
|||
|
|||
struct lock |
|||
{ |
|||
int type; |
|||
off_t start; |
|||
off_t end; |
|||
pid_t pid; |
|||
uint64_t owner; |
|||
struct lock *next; |
|||
}; |
@ -0,0 +1,24 @@ |
|||
#pragma once |
|||
|
|||
#include "lock.h" |
|||
|
|||
struct node |
|||
{ |
|||
struct node *name_next; |
|||
struct node *id_next; |
|||
|
|||
uint64_t nodeid; |
|||
char *name; |
|||
struct node *parent; |
|||
|
|||
uint64_t nlookup; |
|||
uint32_t refctr; |
|||
uint32_t open_count; |
|||
uint64_t hidden_fh; |
|||
|
|||
int32_t treelock; |
|||
struct lock *locks; |
|||
|
|||
uint32_t stat_crc32b; |
|||
uint8_t is_stat_cache_valid:1; |
|||
}; |
@ -0,0 +1,63 @@ |
|||
/* |
|||
ISC License |
|||
|
|||
Copyright (c) 2023, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once |
|||
|
|||
#include "lfmp.h" |
|||
|
|||
#include "node.h" |
|||
|
|||
static lfmp_t g_NODE_FMP; |
|||
|
|||
__attribute__((constructor)) |
|||
void |
|||
__construct_g_NODE_FMP() |
|||
{ |
|||
lfmp_init(&g_NODE_FMP,sizeof(struct node),256); |
|||
} |
|||
|
|||
__attribute__((destructor)) |
|||
void |
|||
__destruct__g_NODE_FMP() |
|||
{ |
|||
lfmp_destroy(&g_NODE_FMP); |
|||
} |
|||
|
|||
struct node* |
|||
node_alloc() |
|||
{ |
|||
return lfmp_calloc(&g_NODE_FMP); |
|||
} |
|||
|
|||
void |
|||
node_free(struct node *node_) |
|||
{ |
|||
lfmp_free(&g_NODE_FMP,node_); |
|||
} |
|||
|
|||
int |
|||
node_gc() |
|||
{ |
|||
return lfmp_gc(&g_NODE_FMP); |
|||
} |
|||
|
|||
lfmp_t* |
|||
node_lfmp() |
|||
{ |
|||
return &g_NODE_FMP; |
|||
} |
@ -0,0 +1,26 @@ |
|||
/* |
|||
ISC License |
|||
|
|||
Copyright (c) 2023, Antonio SJ Musumeci <trapexit@spawn.link> |
|||
|
|||
Permission to use, copy, modify, and/or distribute this software for any |
|||
purpose with or without fee is hereby granted, provided that the above |
|||
copyright notice and this permission notice appear in all copies. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|||
*/ |
|||
|
|||
#pragma once |
|||
|
|||
#include "node.h" |
|||
|
|||
struct node* node_alloc(); |
|||
void node_free(struct node *node_); |
|||
int node_gc(); |
|||
lfmp_t *node_lfmp(); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue