diff options
Diffstat (limited to 'e2fsck/scantest.c')
-rw-r--r-- | e2fsck/scantest.c | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/e2fsck/scantest.c b/e2fsck/scantest.c new file mode 100644 index 0000000..ed3595f --- /dev/null +++ b/e2fsck/scantest.c @@ -0,0 +1,141 @@ +/* + * scantest.c - test the speed of the inode scan routine + */ + +#include "config.h" +#include <string.h> +#include <fcntl.h> +#include <ctype.h> +#include <termios.h> +#include <time.h> +#ifdef HAVE_GETOPT_H +#include <getopt.h> +#endif +#include <unistd.h> +#include <sys/ioctl.h> +#ifdef HAVE_MALLOC_H +#include <malloc.h> +#endif +#include <sys/resource.h> + +#include "et/com_err.h" +#include "../version.h" + +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <stdlib.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <sys/time.h> + +#include "ext2fs/ext2_fs.h" +#include "ext2fs/ext2fs.h" + + +extern int isatty(int); + +const char * device_name = NULL; + +/* + * This structure is used for keeping track of how much resources have + * been used for a particular pass of e2fsck. + */ +struct resource_track { + struct timeval time_start; + struct timeval user_start; + struct timeval system_start; + void *brk_start; +}; + +struct resource_track global_rtrack; + +void init_resource_track(struct resource_track *track) +{ + struct rusage r; + + track->brk_start = sbrk(0); + gettimeofday(&track->time_start, 0); + getrusage(RUSAGE_SELF, &r); + track->user_start = r.ru_utime; + track->system_start = r.ru_stime; +} + +static __inline__ float timeval_subtract(struct timeval *tv1, + struct timeval *tv2) +{ + return ((tv1->tv_sec - tv2->tv_sec) + + ((float) (tv1->tv_usec - tv2->tv_usec)) / 1000000); +} + +static void print_resource_track(struct resource_track *track) +{ + struct rusage r; + struct timeval time_end; + + gettimeofday(&time_end, 0); + getrusage(RUSAGE_SELF, &r); + + printf(_("Memory used: %lu, elapsed time: %6.3f/%6.3f/%6.3f\n"), + (unsigned long)((char *)sbrk(0) - (char *)track->brk_start), + timeval_subtract(&time_end, &track->time_start), + timeval_subtract(&r.ru_utime, &track->user_start), + timeval_subtract(&r.ru_stime, &track->system_start)); +} + + + +int main (int argc, char *argv[]) +{ + errcode_t retval = 0; + int exit_value = 0; + int i; + ext2_filsys fs; + ext2_inode_scan scan; + ext2_ino_t ino; + struct ext2_inode inode; + + printf(_("size of inode=%d\n"), sizeof(inode)); + + device_name = "/dev/hda3"; + + init_resource_track(&global_rtrack); + + retval = ext2fs_open(device_name, 0, + 0, 0, unix_io_manager, &fs); + if (retval) { + com_err(argv[0], retval, _("while trying to open %s"), + device_name); + exit(1); + } + + retval = ext2fs_open_inode_scan(fs, 0, &scan); + if (retval) { + com_err(argv[0], retval, _("while opening inode scan")); + exit(1); + } + retval = ext2fs_get_next_inode(scan, &ino, &inode); + if (retval) { + com_err(argv[0], retval, _("while starting inode scan")); + exit(1); + } + while (ino) { + if (!inode.i_links_count) + goto next; + printf("%lu\n", inode.i_blocks); + next: + retval = ext2fs_get_next_inode(scan, &ino, &inode); + if (retval) { + com_err(argv[0], retval, + _("while doing inode scan")); + exit(1); + } + } + + + ext2fs_close_free(&fs); + + print_resource_track(&global_rtrack); + + return exit_value; +} |