From f008143cf5bfb93b5f5a0cb7018091b6f38301f8 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Sat, 16 May 2015 20:22:43 -0400 Subject: [PATCH] filefrag: fix broken extent emulation and uninitialized variables This started with the fm_ext being uninitialized, but upon closer analysis I discovered that forcing extent emulation in FIBMAP mode was reporting an extent for every block in the file. Fix both problems. The Coverity bug was 1297512. Signed-off-by: Darrick J. Wong Signed-off-by: Theodore Ts'o --- misc/filefrag.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/misc/filefrag.c b/misc/filefrag.c index c1a86840..3b104c6f 100644 --- a/misc/filefrag.c +++ b/misc/filefrag.c @@ -287,8 +287,8 @@ static int filefrag_fibmap(int fd, int blk_shift, int *num_extents, const long bpib = st->st_blksize / 4; int count; + memset(&fm_ext, 0, sizeof(fm_ext)); if (force_extent) { - memset(&fm_ext, 0, sizeof(fm_ext)); fm_ext.fe_flags = FIEMAP_EXTENT_MERGED; } @@ -331,15 +331,17 @@ static int filefrag_fibmap(int fd, int blk_shift, int *num_extents, blk_shift, st); fm_ext.fe_length = 0; (*num_extents)++; + fm_ext.fe_logical = logical; + fm_ext.fe_physical = block * st->st_blksize; } else if (last_block && (block != last_block + 1)) { if (verbose) printf("Discontinuity: Block %ld is at %lu (was " "%lu)\n", i, block, last_block + 1); fm_ext.fe_length = 0; (*num_extents)++; + fm_ext.fe_logical = logical; + fm_ext.fe_physical = block * st->st_blksize; } - fm_ext.fe_logical = logical; - fm_ext.fe_physical = block * st->st_blksize; fm_ext.fe_length += st->st_blksize; last_block = block; } -- 2.11.0