From d54c93d5916ce600c0f376998e10ec8cb71de07f Mon Sep 17 00:00:00 2001 From: Robert M1 <50460704+githubrobbi@users.noreply.github.com> Date: Thu, 23 Jul 2026 07:13:15 -0700 Subject: [PATCH] fix(mft): demote IOCP-fallback chain messages from WARN to INFO MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The two intermediate messages of the read fallback cascade ('IOCP inline read failed — trying fallback strategies' and 'Fallback 1 ($MFT file) failed — trying unbuffered volume I/O') fired at WARN, piercing quiet (WARN-default) subscribers on every run that walked the chain — flagged by the content-service team as upstream mis-leveling. The cascade is designed, automatically-handled resilience: a normal run should stay silent, and -v/verbose reveals the chain when debugging. Both messages are now INFO with byte-identical text (log greps keep working). A chain that exhausts every fallback still propagates a real error to the caller. --- crates/uffs-mft/src/reader/index_read.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/crates/uffs-mft/src/reader/index_read.rs b/crates/uffs-mft/src/reader/index_read.rs index bd682d6f0..7a2753a5d 100644 --- a/crates/uffs-mft/src/reader/index_read.rs +++ b/crates/uffs-mft/src/reader/index_read.rs @@ -803,7 +803,13 @@ impl MftReader { // 1. Open `X:\$MFT` as a file (filesystem-mediated) // 2. Re-open volume with FILE_FLAG_NO_BUFFERING (bypasses cache manager, // direct device I/O) - warn!( + // INFO, not WARN: the cascade below is designed, + // automatically-handled resilience — a normal run + // stays quiet (WARN-default subscribers show + // nothing) and `-v`/verbose reveals the chain when + // debugging. If every fallback fails too, the `?` + // propagates a real error. + info!( volume = %self.volume, error = %iocp_err, "⚠️ IOCP inline read failed — trying fallback strategies" @@ -920,7 +926,10 @@ impl MftReader { return result; } Err(err) => { - warn!( + // INFO for the same reason as the IOCP-failure line: an + // intermediate rung of the handled fallback chain, not an + // operator-actionable warning. + info!( volume = %self.volume, error = %err, "⚠️ Fallback 1 ($MFT file) failed — trying unbuffered volume I/O"