]> git.ipfire.org Git - thirdparty/e2fsprogs.git/blame - e2fsck/iscan.c
.del-ext2_fs.h~7a460879, ChangeLog:
[thirdparty/e2fsprogs.git] / e2fsck / iscan.c
CommitLineData
50e1e10f
TT
1/*
2 * Test to see how quickly we can scan the inode table (not doing
3 * anything else)
4 */
5
6#include <string.h>
7#include <fcntl.h>
8#include <ctype.h>
9#include <termios.h>
10#include <time.h>
11#ifdef HAVE_GETOPT_H
12#include <getopt.h>
13#endif
14#include <unistd.h>
15#ifdef HAVE_ERRNO_H
16#include <errno.h>
17#endif
18#ifdef HAVE_MNTENT_H
19#include <mntent.h>
20#endif
21#include <sys/ioctl.h>
22#include <malloc.h>
23
24#include "et/com_err.h"
25#include "e2fsck.h"
26#include "../version.h"
27
28extern int isatty(int);
29
30const char * program_name = "iscan";
31const char * device_name = NULL;
32
33int yflag = 0;
34int nflag = 0;
35int preen = 0;
36int inode_buffer_blocks = 0;
37int invalid_bitmaps = 0;
38
39struct resource_track global_rtrack;
40
41static void usage(NOARGS)
42{
43 fprintf(stderr,
44 "Usage: %s [-F] [-I inode_buffer_blocks] device\n",
45 program_name);
46 exit(1);
47}
48
49static void PRS(int argc, char *argv[])
50{
51 int flush = 0;
52 char c;
53#ifdef MTRACE
54 extern void *mallwatch;
55#endif
56
57 setbuf(stdout, NULL);
58 setbuf(stderr, NULL);
59 initialize_ext2_error_table();
60
61 if (argc && *argv)
62 program_name = *argv;
63 while ((c = getopt (argc, argv, "FI")) != EOF)
64 switch (c) {
65 case 'F':
66#ifdef BLKFLSBUF
67 flush = 1;
68#else
f8188fff
TT
69 fprintf(stderr, "-F not supported");
70 exit(1);
50e1e10f
TT
71#endif
72 break;
73 case 'I':
74 inode_buffer_blocks = atoi(optarg);
75 break;
76 default:
77 usage ();
78 }
79 device_name = argv[optind];
80 if (flush) {
81#ifdef BLKFLSBUF
82 int fd = open(device_name, O_RDONLY, 0);
83
84 if (fd < 0) {
85 com_err("open", errno, "while opening %s for flushing",
86 device_name);
87 exit(FSCK_ERROR);
88 }
89 if (ioctl(fd, BLKFLSBUF, 0) < 0) {
90 com_err("BLKFLSBUF", errno, "while trying to flush %s",
91 device_name);
92 exit(FSCK_ERROR);
93 }
94 close(fd);
95#else
f8188fff
TT
96 fprintf(stderr, "BLKFLSBUF not supported");
97 exit(1);
50e1e10f
TT
98#endif /* BLKFLSBUF */
99 }
100}
101
102int main (int argc, char *argv[])
103{
104 errcode_t retval = 0;
105 int exit_value = FSCK_OK;
106 ext2_filsys fs;
107 ino_t ino;
108 int num_inodes = 0;
109 struct ext2_inode inode;
110 ext2_inode_scan scan;
111
112 init_resource_track(&global_rtrack);
113
114 PRS(argc, argv);
115
116 retval = ext2fs_open(device_name, 0,
117 0, 0, unix_io_manager, &fs);
118 if (retval) {
119 com_err(program_name, retval, "while trying to open %s",
120 device_name);
121 exit(1);
122 }
123
124 ehandler_init(fs->io);
125
126 retval = ext2fs_open_inode_scan(fs, inode_buffer_blocks, &scan);
127 if (retval) {
128 com_err(program_name, retval, "while opening inode scan");
f8188fff 129 exit(1);
50e1e10f
TT
130 }
131
132 while (1) {
133 retval = ext2fs_get_next_inode(scan, &ino, &inode);
134 if (retval) {
135 com_err(program_name, retval,
136 "while getting next inode");
f8188fff 137 exit(1);
50e1e10f
TT
138 }
139 if (ino == 0)
140 break;
141 num_inodes++;
142 }
143
1b6bf175 144 print_resource_track(NULL, &global_rtrack);
50e1e10f
TT
145 printf("%d inodes scanned.\n", num_inodes);
146
147 exit(0);
148}