From 1e003cc77d43ee01eeaae962ff6d264c9a74a363 Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: Fri, 16 Sep 2011 15:49:30 -0500 Subject: [PATCH] filefrag: Fix uninitialized "expected" value The "count" variable is only ever set if FIBMAP is used, due to the -B switch, or a fiemap failure. However, we use it unconditionally to calculate "expected" for extN files, so we can end up printing garbage. Initialize count to 0, and unless we go through the FIBMAP path, expected will be 0 as well, and in that case do not print the message. Signed-off-by: Eric Sandeen Signed-off-by: Theodore Ts'o --- misc/filefrag.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/misc/filefrag.c b/misc/filefrag.c index 2795e15..b055c2b 100644 --- a/misc/filefrag.c +++ b/misc/filefrag.c @@ -272,7 +272,7 @@ static void frag_report(const char *filename) #endif int bs; long fd; - unsigned long block, last_block = 0, numblocks, i, count; + unsigned long block, last_block = 0, numblocks, i, count = 0; long bpib; /* Blocks per indirect block */ long cylgroups; int num_extents = 0, expected; @@ -373,8 +373,9 @@ static void frag_report(const char *filename) printf("%s: 1 extent found", filename); else printf("%s: %d extents found", filename, num_extents); + /* count, and thus expected, only set for indirect FIBMAP'd files */ expected = (count/((bs*8)-(fsinfo.f_files/8/cylgroups)-3))+1; - if (is_ext2 && expected < num_extents) + if (is_ext2 && expected && expected < num_extents) printf(", perfection would be %d extent%s\n", expected, (expected>1) ? "s" : ""); else -- 1.8.3.1