Mirror von
https://github.com/tkuschel/bees.git
synchronisiert 2026-05-07 20:49:38 +02:00
extent scan: don't divide by zero if there were no loops
Commit 183b6a5361 ("extent scan: refactor
BeesCrawl, BeesScanMode*") moved some statistics calculations out of
the loop in `find_next_extent`, but did not ensure that the statistics
would not be calculated if the loop had not executed any iterations.
In rare instances, the function returns without entering the loop at all,
which results in divide by zero. Add a check just before doing that.
Signed-off-by: Zygo Blaxell <bees@furryterror.org>
Dieser Commit ist enthalten in:
+18
-16
@@ -948,22 +948,24 @@ BeesScanModeExtent::SizeTier::find_next_extent()
|
||||
const auto search_calls = BtrfsIoctlSearchKey::s_calls - init_s_calls;
|
||||
const auto search_loops = BtrfsIoctlSearchKey::s_loops - init_s_loops;
|
||||
if (crawl_time.age() > 1) {
|
||||
BEESLOGDEBUG(
|
||||
"loop_count " << loop_count
|
||||
<< " size_low_count " << size_low_count
|
||||
<< " size_high_count " << size_high_count
|
||||
<< " gen_low_count " << gen_low_count
|
||||
<< " gen_high_count " << gen_high_count
|
||||
<< " search_calls " << search_calls
|
||||
<< " search_loops " << search_loops
|
||||
<< " skips " << skip_count
|
||||
<< " flops " << flop_count
|
||||
<< " time " << crawl_time
|
||||
<< " subvol " << m_subvol
|
||||
<< " search/loop " << pretty(search_calls / loop_count)
|
||||
<< " skip/loop " << (100 * skip_count / loop_count) << "%"
|
||||
<< " flop/loop " << (100 * flop_count / loop_count) << "%"
|
||||
);
|
||||
if (loop_count) {
|
||||
BEESLOGDEBUG(
|
||||
"loop_count " << loop_count
|
||||
<< " size_low_count " << size_low_count
|
||||
<< " size_high_count " << size_high_count
|
||||
<< " gen_low_count " << gen_low_count
|
||||
<< " gen_high_count " << gen_high_count
|
||||
<< " search_calls " << search_calls
|
||||
<< " search_loops " << search_loops
|
||||
<< " skips " << skip_count
|
||||
<< " flops " << flop_count
|
||||
<< " time " << crawl_time
|
||||
<< " subvol " << m_subvol
|
||||
<< " search/loop " << pretty(search_calls / loop_count)
|
||||
<< " skip/loop " << (100 * skip_count / loop_count) << "%"
|
||||
<< " flop/loop " << (100 * flop_count / loop_count) << "%"
|
||||
);
|
||||
}
|
||||
if (debug_oss) {
|
||||
BEESLOGDEBUG("debug oss trace:\n" << debug_oss->str());
|
||||
}
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren