fallocate02.c revision fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716
1122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/******************************************************************************
256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *			 fallocate02.c
3122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak *	Mon Dec 24 2007
456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	Copyright (c) International Business Machines  Corp., 2007
5122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak *	Emali : sharyathi@in.ibm.com
6122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
7122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
8122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/***************************************************************************
956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * This program is free software;  you can redistribute it and/or modify
1056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * it under the terms of the GNU General Public License as published by
1156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * the Free Software Foundation; either version 2 of the License, or
1256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * (at your option) any later version.
1356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
1456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * This program is distributed in the hope that it will be useful,
1556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * but WITHOUT ANY WARRANTY; without even the implied warranty of
1656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * GNU Library General Public License for more details.
1856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
1956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * You should have received a copy of the GNU General Public License
2056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * along with this program; if not, write to the Free Software
2156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak***************************************************************************/
23122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
24122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
2556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
2656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	OS Test - International Business Machines Corp. 2007.
2756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
2856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	TEST IDENTIFIER	: fallocate02
2956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
3056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	EXECUTED BY		: anyone
3156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
3256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	TEST TITLE		: Checks for Errors from fallocate()
3356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
3456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	TEST CASE TOTAL	: 7
3556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
3656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	CPU ARCHITECTURES	: PPC,X86, X86_64
3756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
3856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	AUTHOR			: Sharyathi Nagesh
3956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
4056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	CO-PILOT			:
4156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
4256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	DATE STARTED		: 24/12/2007
4356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
4456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	TEST CASES
4556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	(Tests fallocate() for different test cases as reported in map page)
4656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
4756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	INPUT SPECIFICATIONS
4856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		No input needs to be specified
4956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		  fallocate() in-puts are specified through test_data
5056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
5156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	OUTPUT SPECIFICATIONS
5256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		fallocate Error message matches with the expected error message.
5356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
5456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	ENVIRONMENTAL NEEDS
5556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		Test Needs to be executed on file system supporting ext4
5656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *   LTP {TMP} Needs to be set to such a folder
5756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
5856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	SPECIAL PROCEDURAL REQUIREMENTS
5956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		None
6056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
6156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	DETAILED DESCRIPTION
6256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		This is a test case for fallocate() system call.
6356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		This test suite tests various error messages from fallocate
6456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		If the error message received matches with the expected
6556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		test is considered passed else test fails
6656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		Provided TEST_DEFAULT to switch b/w modes
6756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
6856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		Total 7 Test Cases :-
6956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		Various error messages from the man page
7056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
7156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	Setup:
7256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		Setup files on which fallocate is to be called
7356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
7456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	Test:
7556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		Loop if the proper options are given.
7656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		Execute system call
7756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		Check return code.
7856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		If error obtained matches with the expected error
7956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		PASS the test, otherwise TEST FAILS
8056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		Provided TEST_DEFAULT to switch b/w modes
8156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
8256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *	Cleanup:
8356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *		Cleanup the temporary folder
8456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak *
85122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak*************************************************************************/
86122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
87122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <stdio.h>
88122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <stdlib.h>
89187f2519c2d28a773053eac796c8cb1c67439624Garrett Cooper#include <endian.h>
90122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <errno.h>
91122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <sys/stat.h>
92122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <sys/types.h>
93122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <fcntl.h>
944a5373fbea70484bd96b2c7c89c3fbc7141ac423vapier#include <inttypes.h>
95df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak#include <sys/utsname.h>
96122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
97122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include "test.h"
98122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include "usctest.h"
99122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include "linux_syscall_numbers.h"
100122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
101122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#define BLOCKS_WRITTEN 12
102122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
103122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#ifdef TEST_DEFAULT
10456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak#define DEFAULT_TEST_MODE 0	//DEFAULT MODE
105122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#else
10656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak#define DEFAULT_TEST_MODE 1	//FALLOC_FL_KEEP_SIZE MODE
107122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#endif
108122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
109122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#define OFFSET 12
110122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
111122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakstatic inline long fallocate();
112122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakvoid populate_file();
113122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakvoid create_fifo();
114122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakvoid create_pipe();
115122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakvoid get_blocksize(int fd);
116122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
117fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar *TCID = "fallocate02";
118fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar fnamew[255];
119fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar fnamer[255];
120122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakint fdw;
121122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakint fdr;
12256207cec7732e09c216c751c0b5f88a242bacae6subrata_modakenum { RFILE, WFILE, PIPE, FIFO };
12356207cec7732e09c216c751c0b5f88a242bacae6subrata_modakstruct test_data_t {
124122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int file;
125122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int mode;
126122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	loff_t offset;
127122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	loff_t len;
1284bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak	int error;
1294bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak} test_data[] = {
13056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	{
13156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	RFILE, DEFAULT_TEST_MODE, 0, 1, EBADF}, {
13256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	WFILE, DEFAULT_TEST_MODE, -1, 1, EINVAL}, {
13356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	WFILE, DEFAULT_TEST_MODE, 1, -1, EINVAL}, {
13456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	WFILE, DEFAULT_TEST_MODE, BLOCKS_WRITTEN, 0, EINVAL}, {
13556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	WFILE, DEFAULT_TEST_MODE, BLOCKS_WRITTEN, -1, EINVAL}, {
13656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	WFILE, DEFAULT_TEST_MODE, -(BLOCKS_WRITTEN + OFFSET), 1, EINVAL}, {
13756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	WFILE, DEFAULT_TEST_MODE, BLOCKS_WRITTEN - OFFSET, 1, 0}
138122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak};
139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
140fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubis
14156207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint TST_TOTAL = sizeof(test_data) / sizeof(test_data[0]);
142122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakint block_size;
1434bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modakint buf_size;
144122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
145122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/******************************************************************************
1462c28215423293e443469a07ae7011135d058b671Garrett Cooper * Performs all one time clean up for this test on successful
1474bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * completion,  premature exit or  failure. Closes all temporary
1482c28215423293e443469a07ae7011135d058b671Garrett Cooper * files, removes all temporary directories exits the test with
1492c28215423293e443469a07ae7011135d058b671Garrett Cooper * appropriate return code by calling tst_exit() function.
150122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak******************************************************************************/
15156207cec7732e09c216c751c0b5f88a242bacae6subrata_modakextern void cleanup()
152122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
153122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	/* Close all open file descriptors. */
1544a5373fbea70484bd96b2c7c89c3fbc7141ac423vapier	if (close(fdw) == -1)
155354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		tst_resm(TWARN | TERRNO, "close(%s) failed", fnamew);
156bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
1574a5373fbea70484bd96b2c7c89c3fbc7141ac423vapier	if (close(fdr) == -1)
158354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		tst_resm(TWARN | TERRNO, "close(%s) failed", fnamer);
159bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
16056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	tst_rmdir();
161122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
162122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak}
163122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
164122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
1652c28215423293e443469a07ae7011135d058b671Garrett Cooper * Performs all one time setup for this test. This function is
166122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * used to create temporary dirs and temporary files
167122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * that may be used in the course of this test
168122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
16956207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid setup()
170122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
1712c28215423293e443469a07ae7011135d058b671Garrett Cooper
17256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	tst_sig(FORK, DEF_HANDLER, cleanup);
17356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
17456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	TEST_PAUSE;
17556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
17656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	tst_tmpdir();
17756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
17856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	sprintf(fnamer, "tfile_read_%d", getpid());
17956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	sprintf(fnamew, "tfile_write_%d", getpid());
18056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
1814a5373fbea70484bd96b2c7c89c3fbc7141ac423vapier	fdr = open(fnamer, O_RDONLY | O_CREAT, S_IRUSR);
1824a5373fbea70484bd96b2c7c89c3fbc7141ac423vapier	if (fdr == -1)
183354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		tst_brkm(TBROK | TERRNO, cleanup,
184354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			 "open(%s, O_RDONLY|O_CREAT, S_IRUSR) failed", fnamer);
1854a5373fbea70484bd96b2c7c89c3fbc7141ac423vapier	fdw = open(fnamew, O_RDWR | O_CREAT, S_IRWXU);
1864a5373fbea70484bd96b2c7c89c3fbc7141ac423vapier	if (fdw == -1)
187354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		tst_brkm(TBROK | TERRNO, cleanup,
188354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			 "open(%s, O_RDWR|O_CREAT, S_IRWXU) failed", fnamew);
189122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	get_blocksize(fdr);
190122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	populate_file();
191122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak}
192122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
193122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
194122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Gets the block size for the file system
195122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
19656207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid get_blocksize(int fd)
197122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
19856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	struct stat file_stat;
199bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
20056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	if (fstat(fd, &file_stat) < 0)
201354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		tst_resm(TFAIL | TERRNO,
2024a5373fbea70484bd96b2c7c89c3fbc7141ac423vapier			 "fstat failed while getting block_size");
203bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
20456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	block_size = (int)file_stat.st_blksize;
205122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	buf_size = block_size;
206122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak}
207bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
208122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
209122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Writes data into the file
210122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
21156207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid populate_file()
212122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
21356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	char buf[buf_size + 1];
21456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	int index;
21556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	int blocks;
21656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	int data;
21756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	for (blocks = 0; blocks < BLOCKS_WRITTEN; blocks++) {
21856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		for (index = 0; index < buf_size; index++)
21956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			buf[index] = 'A' + (index % 26);
22056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		buf[buf_size] = '\0';
2214a5373fbea70484bd96b2c7c89c3fbc7141ac423vapier		if ((data = write(fdw, buf, buf_size)) < 0)
222354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			tst_brkm(TBROK | TERRNO, cleanup,
2234a5373fbea70484bd96b2c7c89c3fbc7141ac423vapier				 "Unable to write to %s", fnamew);
22456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	}
225122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak}
226122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
227122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
228122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Wraper function to call fallocate system call
229122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
230122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakstatic inline long fallocate(int fd, int mode, loff_t offset, loff_t len)
231122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
23256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak#if __WORDSIZE == 32
233359980f68b19c77c698b121b57a071dfe6e3ca31Jan Stancek	return (long)ltp_syscall(__NR_fallocate, fd, mode,
234354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     __LONG_LONG_PAIR((off_t) (offset >> 32),
235354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      (off_t) offset),
236354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     __LONG_LONG_PAIR((off_t) (len >> 32),
237354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      (off_t) len));
238187f2519c2d28a773053eac796c8cb1c67439624Garrett Cooper#else
239359980f68b19c77c698b121b57a071dfe6e3ca31Jan Stancek	return ltp_syscall(__NR_fallocate, fd, mode, offset, len);
240187f2519c2d28a773053eac796c8cb1c67439624Garrett Cooper#endif
241122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak}
242122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
243122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
244122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Main function that calls the system call with the  appropriate parameters
245122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
24656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak/* ac: number of command line parameters */
24756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak/* av: pointer to the array of the command line parameters */
24856207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint main(int ac, char **av)
249122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
250122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
251122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int test_index = 0;
252122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int lc;
253122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int fd;
254122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	char fname[255], *msg;
255bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
25656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	/***************************************************************
257122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	     * parse standard options
258122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak     	***************************************************************/
25945e285d46ab47b0ff76c88acb5ba97b0bd5f753dGarrett Cooper	if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL)
26060fa8014af7534eaefa901200c8df4b74ce422e6Garrett Cooper		tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
261bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak
262122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	/* perform global test setup, call setup() function. */
263122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	setup();
264122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
26556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	for (lc = 0; TEST_LOOPING(lc); lc++) {
2662c28215423293e443469a07ae7011135d058b671Garrett Cooper
267d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang		tst_count = 0;
26856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		for (test_index = 0; test_index < TST_TOTAL; test_index++) {
26956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			switch (test_data[test_index].file) {
27056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			case RFILE:
27156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				fd = fdr;
27256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				strcpy(fname, fnamer);
273122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak				break;
27456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			case WFILE:
27556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				fd = fdw;
27656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				strcpy(fname, fnamew);
277122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak				break;
2786f36678dcc7bcdde8d552b83e75c0f62ec58579bvapier			default:
279354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				tst_brkm(TCONF, cleanup,
280354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 "invalid test setting");
2812c28215423293e443469a07ae7011135d058b671Garrett Cooper				tst_exit();
2824bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak			}
28356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
28456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			TEST(fallocate
28556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			     (fd, test_data[test_index].mode,
28656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			      test_data[test_index].offset * block_size,
28756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			      test_data[test_index].len * block_size));
28856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			/* check return code */
28956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			if (TEST_ERRNO != test_data[test_index].error) {
290354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (TEST_ERRNO == EOPNOTSUPP
291354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    || TEST_ERRNO == ENOSYS) {
29256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak					tst_brkm(TCONF, cleanup,
2934a5373fbea70484bd96b2c7c89c3fbc7141ac423vapier						 "fallocate system call is not implemented");
29456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				}
29556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				TEST_ERROR_LOG(TEST_ERRNO);
296354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				tst_resm(TFAIL | TTERRNO,
297354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 "fallocate(%s:%d, %d, %" PRId64 ", %"
298354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 PRId64 ") failed, expected errno:%d",
299354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 fname, fd, test_data[test_index].mode,
300354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 test_data[test_index].offset *
301354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 block_size,
302354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 test_data[test_index].len * block_size,
303354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 test_data[test_index].error);
30456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak			} else {
30556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				/* No Verification test, yet... */
30656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak				tst_resm(TPASS,
307354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 "fallocate(%s:%d, %d, %" PRId64 ", %"
308354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 PRId64 ") returned %d", fname, fd,
309354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					 test_data[test_index].mode,
31056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak					 test_data[test_index].offset *
31156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak					 block_size,
31256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak					 test_data[test_index].len * block_size,
31356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak					 TEST_ERRNO);
314122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak			}
315122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		}
316122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	}
317122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	cleanup();
3182c28215423293e443469a07ae7011135d058b671Garrett Cooper	tst_exit();
319187f2519c2d28a773053eac796c8cb1c67439624Garrett Cooper}
320