1*6a54128fSAndroid Build Coastguard Worker /*
2*6a54128fSAndroid Build Coastguard Worker * flushb.c --- This routine flushes the disk buffers for a disk
3*6a54128fSAndroid Build Coastguard Worker *
4*6a54128fSAndroid Build Coastguard Worker * Copyright 1997, 2000, by Theodore Ts'o.
5*6a54128fSAndroid Build Coastguard Worker *
6*6a54128fSAndroid Build Coastguard Worker * WARNING: use of flushb on some older 2.2 kernels on a heavily loaded
7*6a54128fSAndroid Build Coastguard Worker * system will corrupt filesystems. This program is not really useful
8*6a54128fSAndroid Build Coastguard Worker * beyond for benchmarking scripts.
9*6a54128fSAndroid Build Coastguard Worker *
10*6a54128fSAndroid Build Coastguard Worker * %Begin-Header%
11*6a54128fSAndroid Build Coastguard Worker * This file may be redistributed under the terms of the GNU Public
12*6a54128fSAndroid Build Coastguard Worker * License.
13*6a54128fSAndroid Build Coastguard Worker * %End-Header%
14*6a54128fSAndroid Build Coastguard Worker */
15*6a54128fSAndroid Build Coastguard Worker
16*6a54128fSAndroid Build Coastguard Worker #include "config.h"
17*6a54128fSAndroid Build Coastguard Worker #include <stdio.h>
18*6a54128fSAndroid Build Coastguard Worker #include <string.h>
19*6a54128fSAndroid Build Coastguard Worker #include <unistd.h>
20*6a54128fSAndroid Build Coastguard Worker #include <stdlib.h>
21*6a54128fSAndroid Build Coastguard Worker #include <fcntl.h>
22*6a54128fSAndroid Build Coastguard Worker #include <sys/ioctl.h>
23*6a54128fSAndroid Build Coastguard Worker #include <sys/mount.h>
24*6a54128fSAndroid Build Coastguard Worker #include "../misc/nls-enable.h"
25*6a54128fSAndroid Build Coastguard Worker
26*6a54128fSAndroid Build Coastguard Worker /* For Linux, define BLKFLSBUF if necessary */
27*6a54128fSAndroid Build Coastguard Worker #if (!defined(BLKFLSBUF) && defined(__linux__))
28*6a54128fSAndroid Build Coastguard Worker #define BLKFLSBUF _IO(0x12,97) /* flush buffer cache */
29*6a54128fSAndroid Build Coastguard Worker #endif
30*6a54128fSAndroid Build Coastguard Worker
31*6a54128fSAndroid Build Coastguard Worker const char *progname;
32*6a54128fSAndroid Build Coastguard Worker
usage(void)33*6a54128fSAndroid Build Coastguard Worker static void usage(void)
34*6a54128fSAndroid Build Coastguard Worker {
35*6a54128fSAndroid Build Coastguard Worker fprintf(stderr, _("Usage: %s disk\n"), progname);
36*6a54128fSAndroid Build Coastguard Worker exit(1);
37*6a54128fSAndroid Build Coastguard Worker }
38*6a54128fSAndroid Build Coastguard Worker
main(int argc,char ** argv)39*6a54128fSAndroid Build Coastguard Worker int main(int argc, char **argv)
40*6a54128fSAndroid Build Coastguard Worker {
41*6a54128fSAndroid Build Coastguard Worker int fd;
42*6a54128fSAndroid Build Coastguard Worker
43*6a54128fSAndroid Build Coastguard Worker progname = argv[0];
44*6a54128fSAndroid Build Coastguard Worker if (argc != 2)
45*6a54128fSAndroid Build Coastguard Worker usage();
46*6a54128fSAndroid Build Coastguard Worker
47*6a54128fSAndroid Build Coastguard Worker fd = open(argv[1], O_RDONLY, 0);
48*6a54128fSAndroid Build Coastguard Worker if (fd < 0) {
49*6a54128fSAndroid Build Coastguard Worker perror("open");
50*6a54128fSAndroid Build Coastguard Worker exit(1);
51*6a54128fSAndroid Build Coastguard Worker }
52*6a54128fSAndroid Build Coastguard Worker /*
53*6a54128fSAndroid Build Coastguard Worker * Note: to reread the partition table, use the ioctl
54*6a54128fSAndroid Build Coastguard Worker * BLKRRPART instead of BLKFSLBUF.
55*6a54128fSAndroid Build Coastguard Worker */
56*6a54128fSAndroid Build Coastguard Worker #ifdef BLKFLSBUF
57*6a54128fSAndroid Build Coastguard Worker if (ioctl(fd, BLKFLSBUF, 0) < 0) {
58*6a54128fSAndroid Build Coastguard Worker perror("ioctl BLKFLSBUF");
59*6a54128fSAndroid Build Coastguard Worker exit(1);
60*6a54128fSAndroid Build Coastguard Worker }
61*6a54128fSAndroid Build Coastguard Worker return 0;
62*6a54128fSAndroid Build Coastguard Worker #else
63*6a54128fSAndroid Build Coastguard Worker fprintf(stderr,
64*6a54128fSAndroid Build Coastguard Worker _("BLKFLSBUF ioctl not supported! Can't flush buffers.\n"));
65*6a54128fSAndroid Build Coastguard Worker return 1;
66*6a54128fSAndroid Build Coastguard Worker #endif
67*6a54128fSAndroid Build Coastguard Worker }
68