From: fsgqa Date: Wed, 1 Sep 2004 04:27:46 +0000 (+0000) Subject: Add a test program which just dumps out device size as mkfs would see it. Makes... X-Git-Tag: v1.1.0~788 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=629dfe067a1d5c89fb8e615b454e184e3007dc53;p=users%2Fhch%2Fxfstests-dev.git Add a test program which just dumps out device size as mkfs would see it. Makes finger-pointing at buggy drivers easier. --- diff --git a/src/Makefile b/src/Makefile index e2e5ad7e2..f2aa548fe 100644 --- a/src/Makefile +++ b/src/Makefile @@ -37,7 +37,7 @@ TARGETS = dirstress fill fill2 getpagesize holes lstat64 \ nametest permname randholes runas truncfile usemem \ mmapcat append_reader append_writer dirperf metaperf \ devzero feature alloc fault fstest t_access_root \ - godown resvtest writemod + godown resvtest writemod getdevicesize LINUX_TARGETS = loggen xfsctl bstat t_mtab diff --git a/src/getdevicesize.c b/src/getdevicesize.c new file mode 100644 index 000000000..587402395 --- /dev/null +++ b/src/getdevicesize.c @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2004 Silicon Graphics, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Further, this software is distributed without any warranty that it is + * free of the rightful claim of any third person regarding infringement + * or the like. Any license provided herein, whether implied or + * otherwise, applies only to this software file. Patent licenses, if + * any, provided herein do not apply to combinations of this program with + * other software, or any other product whatsoever. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write the Free Software Foundation, Inc., 59 + * Temple Place - Suite 330, Boston MA 02111-1307, USA. + * + * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, + * Mountain View, CA 94043, or: + * + * http://www.sgi.com + * + * For further information regarding this notice, see: + * + * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ + */ + +/* + * Test program that uses the same interfaces as mkfs.xfs for + * Linux, dumps out just the device size values from a driver. + */ + +#include +#include +#include +#include +#include + +#ifndef BLKGETSIZE64 +# define BLKGETSIZE64 _IOR(0x12,114,size_t) +#endif +#ifndef BLKSSZGET +# define BLKSSZGET _IO(0x12,104) +#endif + +int main(int argc, char **argv) +{ + __uint64_t size; + long long sz = -1; + int error, fd; + + if (argc != 2) { + fputs("insufficient arguments\n", stderr); + return 1; + } + fd = open(argv[1], O_RDONLY); + if (!fd) { + perror(argv[1]); + return 1; + } + + error = ioctl(fd, BLKGETSIZE64, &size); + if (error >= 0) { + /* BLKGETSIZE64 returns size in bytes not 512-byte blocks */ + sz = (long long)(size >> 9); + printf("%lld 512 byte blocks (BLKGETSIZE64)\n", sz); + } else { + /* If BLKGETSIZE64 fails, try BLKGETSIZE */ + unsigned long tmpsize; + + error = ioctl(fd, BLKGETSIZE, &tmpsize); + if (error < 0) { + fprintf(stderr, "can't determine device size"); + return 1; + } + sz = (long long)tmpsize; + printf("%lld 512 byte blocks (BLKGETSIZE)\n", sz); + } + return 0; +}