All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] filefrag: minor code fixes and cleanups
@ 2014-07-30 20:25 Andreas Dilger
  2014-07-30 20:25 ` [PATCH 2/3] filefrag: reserve fields and new extent flags Andreas Dilger
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Andreas Dilger @ 2014-07-30 20:25 UTC (permalink / raw)
  To: tytso; +Cc: linux-ext4, David Sterba, Andreas Dilger

Print filefrag_fiemap() error message to stderr instead of stdout.

Only call ioctl(EXT3_IOC_GETFLAGS) for ext{2,3,4} filesystems to
decide if the ext2 indirect block allocation heuristic shold be used.

Properly handle the the force_bmap (-B) option.

Exit with a positive error number instead of a negative one.

Signed-off-by: Andreas Dilger <adilger@dilger.ca>
---
 misc/filefrag.c |   26 +++++++++++++++-----------
 1 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/misc/filefrag.c b/misc/filefrag.c
index 2ce1b9b..d71bf43 100644
--- a/misc/filefrag.c
+++ b/misc/filefrag.c
@@ -226,9 +226,11 @@ static int filefrag_fiemap(int fd, int blk_shift, int *num_extents,
 		rc = ioctl(fd, FS_IOC_FIEMAP, (unsigned long) fiemap);
 		if (rc < 0) {
 			static int fiemap_incompat_printed;
+
 			rc = -errno;
 			if (rc == -EBADR && !fiemap_incompat_printed) {
-				printf("FIEMAP failed with unknown flags %#x\n",
+				fprintf(stderr, "FIEMAP failed with unknown "
+						"flags %x\n",
 				       fiemap->fm_flags);
 				fiemap_incompat_printed = 1;
 			}
@@ -360,7 +362,6 @@ static int frag_report(const char *filename)
 	int		num_extents = 1, expected = ~0;
 	int		is_ext2 = 0;
 	static dev_t	last_device;
-	unsigned int	flags;
 	int		width;
 	int		rc = 0;
 
@@ -398,12 +399,14 @@ static int frag_report(const char *filename)
 			       (unsigned long)fsinfo.f_type);
 	}
 	st.st_blksize = blksize;
-	if (ioctl(fd, EXT3_IOC_GETFLAGS, &flags) < 0)
-		flags = 0;
-	if (!(flags & EXT4_EXTENTS_FL) &&
-	    ((fsinfo.f_type == 0xef51) || (fsinfo.f_type == 0xef52) ||
-	     (fsinfo.f_type == 0xef53)))
-		is_ext2++;
+	if (fsinfo.f_type == 0xef51 || fsinfo.f_type == 0xef52 ||
+	    fsinfo.f_type == 0xef53) {
+		unsigned int	flags;
+
+		if (ioctl(fd, EXT3_IOC_GETFLAGS, &flags) == 0 &&
+		    !(flags & EXT4_EXTENTS_FL))
+			is_ext2 = 1;
+	}
 
 	if (is_ext2) {
 		long cylgroups = div_ceil(fsinfo.f_blocks, blksize * 8);
@@ -441,7 +444,7 @@ static int frag_report(const char *filename)
 		expected = 0;
 	}
 
-	if (force_bmap || rc < 0) {
+	if (force_bmap || rc < 0) { /* FIEMAP failed, try FIBMAP instead */
 		expected = filefrag_fibmap(fd, blk_shift, &num_extents,
 					   &st, numblocks, is_ext2);
 		if (expected < 0) {
@@ -492,7 +495,7 @@ int main(int argc, char**argv)
 	char **cpp;
 	int rc = 0, c;
 
-	while ((c = getopt(argc, argv, "Bb::eksvxX")) != EOF)
+	while ((c = getopt(argc, argv, "Bb::eksvxX")) != EOF) {
 		switch (c) {
 		case 'B':
 			force_bmap++;
@@ -551,6 +554,7 @@ int main(int argc, char**argv)
 			usage(argv[0]);
 			break;
 		}
+	}
 
 	if (optind == argc)
 		usage(argv[0]);
@@ -562,6 +566,6 @@ int main(int argc, char**argv)
 			rc = rc2;
 	}
 
-	return rc;
+	return -rc;
 }
 #endif
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-08-02  2:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-30 20:25 [PATCH 1/3] filefrag: minor code fixes and cleanups Andreas Dilger
2014-07-30 20:25 ` [PATCH 2/3] filefrag: reserve fields and new extent flags Andreas Dilger
2014-07-30 20:32   ` Andreas Dilger
2014-07-30 20:25 ` [PATCH 3/3] filefrag: print out physical extent length if set Andreas Dilger
2014-08-02  2:09 ` [PATCH 1/3] filefrag: minor code fixes and cleanups Theodore Ts'o

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.