From 58167c3636bfb60b4000a5e09012ae239c65116c Mon Sep 17 00:00:00 2001 From: Antonio SJ Musumeci Date: Tue, 16 Jun 2015 22:48:45 -0400 Subject: [PATCH] first w/ free space policy. closes #72 --- src/fs.cpp | 31 +++++++++++++++++++++++++++++++ src/fs.hpp | 4 ++++ src/policy.cpp | 2 ++ src/policy.hpp | 2 ++ 4 files changed, 39 insertions(+) diff --git a/src/fs.cpp b/src/fs.cpp index 456639c2..7ab0ca90 100644 --- a/src/fs.cpp +++ b/src/fs.cpp @@ -594,6 +594,37 @@ namespace fs return -1; } + int + fwfs(const vector &basepaths, + const string &fusepath, + const size_t minfreespace, + Paths &paths) + { + for(size_t i = 0, size = basepaths.size(); i != size; i++) + { + int rv; + const char *basepath; + struct statvfs fsstats; + + basepath = basepaths[i].c_str(); + rv = ::statvfs(basepath,&fsstats); + if(rv == 0) + { + fsblkcnt_t spaceavail; + + spaceavail = (fsstats.f_frsize * fsstats.f_bavail); + if(spaceavail > minfreespace) + { + paths.push_back(Path(basepath, + fs::make_path(basepath,fusepath))); + return 0; + } + } + } + + return mfs(basepaths,fusepath,minfreespace,paths); + } + int newest(const vector &basepaths, const string &fusepath, diff --git a/src/fs.hpp b/src/fs.hpp index 7f5a3ecc..4db89db9 100644 --- a/src/fs.hpp +++ b/src/fs.hpp @@ -140,6 +140,10 @@ namespace fs const string &fusepath, const size_t minfreespace, Paths &path); + int fwfs(const vector &paths, + const string &fusepath, + const size_t minfreespace, + Paths &path); int newest(const vector &paths, const string &fusepath, const size_t minfreespace, diff --git a/src/policy.cpp b/src/policy.cpp index 0cf8915a..ac26c686 100644 --- a/src/policy.cpp +++ b/src/policy.cpp @@ -39,6 +39,7 @@ namespace mergerfs (POLICY(epmfs)) (POLICY(ff)) (POLICY(ffwp)) + (POLICY(fwfs)) (POLICY(mfs)) (POLICY(newest)) (POLICY(rand)); @@ -50,6 +51,7 @@ namespace mergerfs const Policy &Policy::epmfs = Policy::policies[Policy::Enum::epmfs]; const Policy &Policy::ff = Policy::policies[Policy::Enum::ff]; const Policy &Policy::ffwp = Policy::policies[Policy::Enum::ffwp]; + const Policy &Policy::fwfs = Policy::policies[Policy::Enum::fwfs]; const Policy &Policy::mfs = Policy::policies[Policy::Enum::mfs]; const Policy &Policy::newest = Policy::policies[Policy::Enum::newest]; const Policy &Policy::rand = Policy::policies[Policy::Enum::rand]; diff --git a/src/policy.hpp b/src/policy.hpp index fadfa6d5..363e762b 100644 --- a/src/policy.hpp +++ b/src/policy.hpp @@ -45,6 +45,7 @@ namespace mergerfs epmfs, ff, ffwp, + fwfs, mfs, newest, rand, @@ -105,6 +106,7 @@ namespace mergerfs static const Policy &epmfs; static const Policy &ff; static const Policy &ffwp; + static const Policy &fwfs; static const Policy &mfs; static const Policy &newest; static const Policy &rand;