mirror of https://github.com/trapexit/mergerfs.git
Antonio SJ Musumeci
8 months ago
2 changed files with 94 additions and 0 deletions
@ -0,0 +1,59 @@ |
|||
#include "passthrough.hpp"
|
|||
|
|||
#include "boost/unordered/concurrent_flat_map.hpp"
|
|||
|
|||
#include <string>
|
|||
|
|||
typedef boost::unordered::concurrent_flat_map<std::string,PTInfo> PTMap; |
|||
static PTMap g_PT; |
|||
|
|||
namespace PassthroughStuff |
|||
{ |
|||
std::mutex* |
|||
get_mutex(const char *fusepath_) |
|||
{ |
|||
std::mutex *m = nullptr; |
|||
|
|||
g_PT.visit(fusepath_, |
|||
[&](const PTMap::value_type &x_) |
|||
{ |
|||
m = &x_.second.mutex; |
|||
}); |
|||
|
|||
if(!m) |
|||
{ |
|||
g_PT.insert(PTMap::value_type{fusepath_,PTInfo{}}); |
|||
g_PT.visit(fusepath_, |
|||
[&](const PTMap::value_type &x_) |
|||
{ |
|||
m = &x_.second.mutex; |
|||
}); |
|||
} |
|||
|
|||
return m; |
|||
} |
|||
|
|||
PTInfo* |
|||
get_pti(const char *fusepath_) |
|||
{ |
|||
PTInfo *pti = nullptr; |
|||
|
|||
g_PT.visit(fusepath_, |
|||
[&](PTMap::value_type &x_) |
|||
{ |
|||
pti = &x_.second; |
|||
}); |
|||
|
|||
if(!pti) |
|||
{ |
|||
g_PT.insert(PTMap::value_type{fusepath_,PTInfo{}}); |
|||
g_PT.visit(fusepath_, |
|||
[&](PTMap::value_type &x_) |
|||
{ |
|||
pti = &x_.second; |
|||
}); |
|||
} |
|||
|
|||
return pti; |
|||
} |
|||
}; |
@ -0,0 +1,35 @@ |
|||
#pragma once
|
|||
|
|||
#include <mutex>
|
|||
#include <string>
|
|||
|
|||
struct PTInfo |
|||
{ |
|||
PTInfo() |
|||
: path_fd(-1), |
|||
backing_id(0), |
|||
open_count(0) |
|||
{ |
|||
} |
|||
|
|||
PTInfo(PTInfo &&pti_) |
|||
{ |
|||
std::lock_guard<std::mutex> _(mutex); |
|||
|
|||
path_fd = pti_.path_fd; |
|||
backing_id = pti_.backing_id; |
|||
filepath = pti_.filepath; |
|||
open_count = pti_.open_count; |
|||
} |
|||
|
|||
int path_fd; |
|||
int backing_id; |
|||
unsigned open_count; |
|||
std::string filepath; |
|||
mutable std::mutex mutex; |
|||
}; |
|||
|
|||
namespace PassthroughStuff |
|||
{ |
|||
PTInfo* get_pti(const char *fusepath); |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue