From: Darrick J. Wong Date: Sun, 17 May 2015 00:22:43 +0000 (-0400) Subject: filefrag: fix broken extent emulation and uninitialized variables X-Git-Tag: v1.43-WIP-2015-05-18~12 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=f008143cf5bfb93b5f5a0cb7018091b6f38301f8;p=tools%2Fe2fsprogs.git 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 --- diff --git a/misc/filefrag.c b/misc/filefrag.c index c1a8684..3b104c6 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; }