119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * flushb.c --- This routine flushes the disk buffers for a disk 319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * 419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Copyright 1997, 2000, by Theodore Ts'o. 53984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt * 619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * WARNING: use of flushb on some older 2.2 kernels on a heavily loaded 719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * system will corrupt filesystems. This program is not really useful 819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * beyond for benchmarking scripts. 919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * 1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * %Begin-Header% 1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * This file may be redistributed under the terms of the GNU Public 1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * License. 1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * %End-Header% 1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdio.h> 1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <string.h> 1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <unistd.h> 1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdlib.h> 2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <fcntl.h> 2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <sys/ioctl.h> 2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <sys/mount.h> 2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "../misc/nls-enable.h" 2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* For Linux, define BLKFLSBUF if necessary */ 2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#if (!defined(BLKFLSBUF) && defined(__linux__)) 2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKFLSBUF _IO(0x12,97) /* flush buffer cache */ 2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectconst char *progname; 3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstatic void usage(void) 3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fprintf(stderr, _("Usage: %s disk\n"), progname); 3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit(1); 363984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt} 373984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint main(int argc, char **argv) 3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int fd; 413984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project progname = argv[0]; 4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (argc != 2) 4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project usage(); 4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fd = open(argv[1], O_RDONLY, 0); 4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (fd < 0) { 4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project perror("open"); 4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit(1); 5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project /* 5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Note: to reread the partition table, use the ioctl 5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * BLKRRPART instead of BLKFSLBUF. 5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef BLKFLSBUF 5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ioctl(fd, BLKFLSBUF, 0) < 0) { 5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project perror("ioctl BLKFLSBUF"); 5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit(1); 5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project return 0; 6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#else 6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fprintf(stderr, 6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project _("BLKFLSBUF ioctl not supported! Can't flush buffers.\n")); 6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project return 1; 6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 67