Merge "Enhance checkpoint=disable GC threshold fallback mechanism"
This commit is contained in:
commit
2ed2f814fa
|
@ -790,20 +790,26 @@ static int __mount(const std::string& source, const std::string& target, const F
|
||||||
int save_errno = 0;
|
int save_errno = 0;
|
||||||
int gc_allowance = 0;
|
int gc_allowance = 0;
|
||||||
std::string opts;
|
std::string opts;
|
||||||
|
std::string checkpoint_opts;
|
||||||
bool try_f2fs_gc_allowance = is_f2fs(entry.fs_type) && entry.fs_checkpoint_opts.length() > 0;
|
bool try_f2fs_gc_allowance = is_f2fs(entry.fs_type) && entry.fs_checkpoint_opts.length() > 0;
|
||||||
|
bool try_f2fs_fallback = false;
|
||||||
Timer t;
|
Timer t;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (save_errno == EINVAL && try_f2fs_gc_allowance) {
|
if (save_errno == EINVAL && (try_f2fs_gc_allowance || try_f2fs_fallback)) {
|
||||||
PINFO << "Kernel does not support checkpoint=disable:[n]%, trying without.";
|
PINFO << "Kernel does not support " << checkpoint_opts << ", trying without.";
|
||||||
try_f2fs_gc_allowance = false;
|
try_f2fs_gc_allowance = false;
|
||||||
|
// Attempt without gc allowance before dropping.
|
||||||
|
try_f2fs_fallback = !try_f2fs_fallback;
|
||||||
}
|
}
|
||||||
if (try_f2fs_gc_allowance) {
|
if (try_f2fs_gc_allowance) {
|
||||||
opts = entry.fs_options + entry.fs_checkpoint_opts + ":" +
|
checkpoint_opts = entry.fs_checkpoint_opts + ":" + std::to_string(gc_allowance) + "%";
|
||||||
std::to_string(gc_allowance) + "%";
|
} else if (try_f2fs_fallback) {
|
||||||
|
checkpoint_opts = entry.fs_checkpoint_opts;
|
||||||
} else {
|
} else {
|
||||||
opts = entry.fs_options;
|
checkpoint_opts = "";
|
||||||
}
|
}
|
||||||
|
opts = entry.fs_options + checkpoint_opts;
|
||||||
if (save_errno == EAGAIN) {
|
if (save_errno == EAGAIN) {
|
||||||
PINFO << "Retrying mount (source=" << source << ",target=" << target
|
PINFO << "Retrying mount (source=" << source << ",target=" << target
|
||||||
<< ",type=" << entry.fs_type << ", gc_allowance=" << gc_allowance << "%)=" << ret
|
<< ",type=" << entry.fs_type << ", gc_allowance=" << gc_allowance << "%)=" << ret
|
||||||
|
@ -814,7 +820,7 @@ static int __mount(const std::string& source, const std::string& target, const F
|
||||||
save_errno = errno;
|
save_errno = errno;
|
||||||
if (try_f2fs_gc_allowance) gc_allowance += 10;
|
if (try_f2fs_gc_allowance) gc_allowance += 10;
|
||||||
} while ((ret && save_errno == EAGAIN && gc_allowance <= 100) ||
|
} while ((ret && save_errno == EAGAIN && gc_allowance <= 100) ||
|
||||||
(ret && save_errno == EINVAL && try_f2fs_gc_allowance));
|
(ret && save_errno == EINVAL && (try_f2fs_gc_allowance || try_f2fs_fallback)));
|
||||||
const char* target_missing = "";
|
const char* target_missing = "";
|
||||||
const char* source_missing = "";
|
const char* source_missing = "";
|
||||||
if (save_errno == ENOENT) {
|
if (save_errno == ENOENT) {
|
||||||
|
|
Loading…
Reference in New Issue