Whamcloud - gitweb
unused.c (do_dump_unused): Add new command which dumps the
authorTheodore Ts'o <tytso@mit.edu>
Wed, 21 May 2003 21:58:36 +0000 (17:58 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 21 May 2003 21:58:36 +0000 (17:58 -0400)
unused blocks.  (Initial implementation; currently only
dumps the output to stdout.)

debugfs/ChangeLog
debugfs/Makefile.in
debugfs/debug_cmds.ct
debugfs/unused.c [new file with mode: 0644]

index 7e15353..33eb395 100644 (file)
@@ -1,3 +1,9 @@
+2003-05-21  Theodore Ts'o  <tytso@mit.edu>
+
+       * unused.c (do_dump_unused): Add new command which dumps the
+               unused blocks.  (Initial implementation; currently only
+               dumps the output to stdout.)
+
 2003-05-13  root  <tytso@mit.edu>
 
        * util.c (reset_getopt), debugfs.c (do_open_filesys,
index 3fc7fb0..cfc24e9 100644 (file)
@@ -18,12 +18,12 @@ MANPAGES=   debugfs.8
 MK_CMDS=       _SS_DIR_OVERRIDE=../lib/ss ../lib/ss/mk_cmds
 
 DEBUG_OBJS= debug_cmds.o debugfs.o util.o ncheck.o icheck.o ls.o \
-       lsdel.o dump.o setsuper.o logdump.o htree.o
+       lsdel.o dump.o setsuper.o logdump.o htree.o unused.o
 
 SRCS= debug_cmds.c $(srcdir)/debugfs.c $(srcdir)/util.c $(srcdir)/ls.c \
        $(srcdir)/ncheck.c $(srcdir)/icheck.c $(srcdir)/lsdel.c \
        $(srcdir)/dump.c $(srcdir)/setsuper.c ${srcdir}/logdump.c \
-       $(srcdir)/htree.c
+       $(srcdir)/htree.c $(srcdir)/unused.c
 
 LIBS= $(LIBEXT2FS) $(LIBE2P) $(LIBSS) $(LIBCOM_ERR) $(LIBBLKID) \
        $(LIBUUID) $(DLOPEN_LIB)
index 21cab09..cea5685 100644 (file)
@@ -142,5 +142,8 @@ request do_bmap, "Calculate the logical->physical block mapping for an inode",
 request do_imap, "Calculate the location of an inode",
        imap;
 
+request        do_dump_unused, "Dump unused blocks",
+       dump_unused;
+
 end;
 
diff --git a/debugfs/unused.c b/debugfs/unused.c
new file mode 100644 (file)
index 0000000..c055db7
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * unused.c --- quick and dirty unused space dumper
+ * 
+ * Copyright (C) 1997 Theodore Ts'o.  This file may be redistributed
+ * under the terms of the GNU Public License.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <time.h>
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#include <sys/types.h>
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#else 
+extern int optind;
+extern char *optarg;
+#endif
+
+#include "debugfs.h"
+
+void do_dump_unused(int argc, char **argv)
+{
+       unsigned long   blk;
+       unsigned char buf[32768];
+       int     i;
+       errcode_t       retval;
+
+       for (blk=current_fs->super->s_first_data_block;
+            blk < current_fs->super->s_blocks_count; blk++) {
+               if (ext2fs_test_block_bitmap(current_fs->block_map,blk))
+                       continue;
+               retval = io_channel_read_blk(current_fs->io, blk, 1, buf);
+               if (retval) {
+                       com_err(argv[0], retval, "While reading block\n");
+                       return;
+               }
+               for (i=0; i < current_fs->blocksize; i++)
+                       if (buf[i])
+                               break;
+               if (i >= current_fs->blocksize)
+                       continue;
+               printf("\nUnused block %ld contains non-zero data:\n\n",
+                      blk);
+               for (i=0; i < current_fs->blocksize; i++)
+                       fputc(buf[i], stdout);
+       }
+}