From: Eric Sandeen Date: Thu, 5 May 2011 18:21:08 +0000 (-0500) Subject: filefrag: count 0 extents properly when verbose X-Git-Tag: v1.42-WIP-0702~13^2~14 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=a8d8432b584c222dc7960c15cd7b9acbc7c72352;p=tools%2Fe2fsprogs.git filefrag: count 0 extents properly when verbose /boot/a: 0 extents found works properly, but Filesystem type is: ef53 Filesystem cylinder groups is approximately 61 File size of a is 0 (0 blocks, blocksize 1024) ext logical physical expected length flags a: 1 extent found yields 1 extent when it should be 0. Fix this up by special-casing no extents returned in verbose mode; skip printing the header for the columns too, since there are no columns to print. Also, in nonverbose mode we can set fm_extent_count to 0 so that FIEMAP will just query the extent count without gathering details; clarify this with a comment. Addresses-RedHat-Bugzilla: 653234 Signed-off-by: Eric Sandeen Signed-off-by: Theodore Ts'o --- diff --git a/misc/filefrag.c b/misc/filefrag.c index 1770541..27f48ea 100644 --- a/misc/filefrag.c +++ b/misc/filefrag.c @@ -181,6 +181,10 @@ static int filefrag_fiemap(int fd, int blk_shift, int *num_extents) memset(fiemap, 0, sizeof(struct fiemap)); + /* + * If count (and therefore fm_extent_count) == 0, FIEMAP + * returns count of extents found without filling in details. + */ if (!verbose) count = 0; @@ -205,6 +209,14 @@ static int filefrag_fiemap(int fd, int blk_shift, int *num_extents) } if (verbose && !fiemap_header_printed) { + /* + * No extents on first call? + * Skip header and show 0 extents. + */ + if (fiemap->fm_mapped_extents == 0) { + *num_extents = 0; + goto out; + } printf(" ext %*s %*s %*s length flags\n", logical_width, "logical", physical_width, "physical", physical_width, "expected");