From 1ff2878e23f13e397bf5760bb359ea5b544a3355 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Sat, 27 Apr 2024 08:58:27 +0200 Subject: [PATCH] feat(dwarfsck): readv() before context switch to speed up --checksum --- src/dwarfsck_main.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/dwarfsck_main.cpp b/src/dwarfsck_main.cpp index a8d1e728..c831522a 100644 --- a/src/dwarfsck_main.cpp +++ b/src/dwarfsck_main.cpp @@ -110,23 +110,24 @@ void do_checksum(logger& lgr, filesystem_v2& fs, iolayer const& iol, fs.walk_data_order([&](auto const& de) { auto iv = de.inode(); + if (iv.is_regular_file()) { - wg.add_job([&, de, iv] { - file_stat st; + file_stat st; - if (fs.getattr(de.inode(), &st) != 0) { - LOG_ERROR << "failed to get attributes for inode " << iv.inode_num(); - return; - } + if (fs.getattr(de.inode(), &st) != 0) { + LOG_ERROR << "failed to get attributes for inode " << iv.inode_num(); + return; + } - auto ranges = fs.readv(iv.inode_num(), st.size); + auto ranges = fs.readv(iv.inode_num(), st.size); - if (!ranges) { - LOG_ERROR << "failed to read inode " << iv.inode_num() << ": " - << std::strerror(-ranges.error()); - return; - } + if (!ranges) { + LOG_ERROR << "failed to read inode " << iv.inode_num() << ": " + << std::strerror(-ranges.error()); + return; + } + wg.add_job([&, de, iv, ranges = std::move(ranges)]() mutable { checksum cs(algo); for (auto& fut : ranges.value()) {