fallocate02.c revision 43337a3cf6f8809647cf9fc6c0054241f44b1fb1
1122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
2122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/******************************************************************************
3122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak *          			 fallocate02.c
4122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak *	Mon Dec 24 2007
5122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak *  	Copyright (c) International Business Machines  Corp., 2007
6122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak *	Emali : sharyathi@in.ibm.com
7122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
8122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
9122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
10122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/***************************************************************************
11122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * This program is free software;  you can redistribute it and/or modify
12122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * it under the terms of the GNU General Public License as published by
13122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * the Free Software Foundation; either version 2 of the License, or
14122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * (at your option) any later version.
15122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
16122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * This program is distributed in the hope that it will be useful,
17122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * GNU Library General Public License for more details.
20122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
21122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * You should have received a copy of the GNU General Public License
22122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * along with this program; if not, write to the Free Software
23122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak***************************************************************************/
25122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
26122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
27122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
28122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
29122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *    OS Test - International Business Machines Corp. 2007.
30122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
31122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *    TEST IDENTIFIER	: fallocate02
32122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
33122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *    EXECUTED BY		: anyone
34122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
35122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *    TEST TITLE		: Checks for Errors from fallocate()
36122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
37122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *    TEST CASE TOTAL	: 7
38122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
39122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *    CPU ARCHITECTURES	: PPC,X86, X86_64
40122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
41122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *    AUTHOR			: Sharyathi Nagesh
42122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
43122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *    CO-PILOT			:
44122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
45122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *    DATE STARTED		: 24/12/2007
46122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
47122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *    TEST CASES
48122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *    (Tests fallocate() for different test cases as reported in map page)
49122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
50122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *	INPUT SPECIFICATIONS
51122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * 		No input needs to be specified
52122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		  fallocate() in-puts are specified through test_data
53122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
54122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *	OUTPUT SPECIFICATIONS
55122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		fallocate Error message matches with the expected error message.
56122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
57122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *	ENVIRONMENTAL NEEDS
58122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		Test Needs to be executed on file system supporting ext4
59122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *   LTP {TMP} Needs to be set to such a folder
60122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
61122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *	SPECIAL PROCEDURAL REQUIREMENTS
62122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  * 		None
63122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
64122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *	DETAILED DESCRIPTION
65122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		This is a test case for fallocate() system call.
66122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		This test suite tests various error messages from fallocate
67122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		If the error message received matches with the expected
68122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		test is considered passed else test fails
69122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		Provided TEST_DEFAULT to switch b/w modes
70122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
71122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		Total 7 Test Cases :-
72122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		Various error messages from the man page
73122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
74122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *	Setup:
75122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		Setup files on which fallocate is to be called
76122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
77122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *	Test:
78122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		Loop if the proper options are given.
79122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		Execute system call
80122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		Check return code.
81122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		If error obtained matches with the expected error
82122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		PASS the test, otherwise TEST FAILS
83122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		Provided TEST_DEFAULT to switch b/w modes
84122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
85122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *	Cleanup:
86122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *		Cleanup the temporary folder
87122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak  *
88122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak*************************************************************************/
89122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
90122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/* Standard Include Files */
91122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <stdio.h>
92122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <stdlib.h>
93122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <errno.h>
94122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <sys/stat.h>
95122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <sys/types.h>
96122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include <fcntl.h>
97df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak#include <sys/utsname.h>
98122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
99122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/* Harness Specific Include Files. */
100122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include "test.h"
101122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include "usctest.h"
102122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#include "linux_syscall_numbers.h"
103122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
104122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#define BLOCKS_WRITTEN 12
105122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
106122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#ifdef TEST_DEFAULT
107122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	#define DEFAULT_TEST_MODE 0   //DEFAULT MODE
108122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#else
109122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	#define DEFAULT_TEST_MODE 1  //FALLOC_FL_KEEP_SIZE MODE
110122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#endif
111122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
112122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#ifndef __NR_fallocate
113122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#	define __NR_fallocate -1  //DUMMY VALUE
114122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int arch_support = 0;
115122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#else
116122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int arch_support = 1;
117122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#endif
118122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
119122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak#define OFFSET 12
120122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
121122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*Local Functions*/
122122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakstatic inline long fallocate();
123122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakvoid populate_file();
124122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakvoid create_fifo();
125122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakvoid create_pipe();
126122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakvoid get_blocksize(int fd);
127122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
128122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/* Extern Global Variables */
129122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakextern int  Tst_count;               /* counter for tst_xxx routines.         */
130122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/* Global Variables */
131122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakchar *TCID     = "fallocate02"; /* test program identifier.          */
132122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakchar fnamew[255];	/* Files used for testing  */
133122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakchar fnamer[255]; /* Files used for testing  */
134122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakint fdw;
135122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakint fdr;
136122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakenum {RFILE,WFILE,PIPE,FIFO};
137122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakstruct test_data_t
138122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
139122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int file;
140122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int mode;
141122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	loff_t offset;
142122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	loff_t len;
143122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int error;
144122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak} test_data[] = {
145122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                {RFILE, DEFAULT_TEST_MODE, 0, 1, EBADF},
146122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                {WFILE, DEFAULT_TEST_MODE, -1, 1, EINVAL},
147122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                {WFILE, DEFAULT_TEST_MODE, 1, -1, EINVAL},
148122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                {WFILE, DEFAULT_TEST_MODE, BLOCKS_WRITTEN, 0, EINVAL},
149122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                {WFILE, DEFAULT_TEST_MODE, BLOCKS_WRITTEN, -1, EINVAL},
150122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                {WFILE, DEFAULT_TEST_MODE,-( BLOCKS_WRITTEN + OFFSET ), 1 , EINVAL},
151122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                {WFILE, DEFAULT_TEST_MODE, BLOCKS_WRITTEN - OFFSET, 1 , 0}
152122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak};
153122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakint  TST_TOTAL  = sizeof(test_data)/sizeof(test_data[0]);                  /* total number of tests in this file.   */
154122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakint block_size;
155122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakint buf_size;
156122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
157122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
158122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/******************************************************************************
159122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Performs all one time clean up for this test on successful
160122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * completion,  premature exit or  failure. Closes all temporary
161122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * files, removes all temporary directories exits the test with
162122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * appropriate return code by calling tst_exit() function.
163122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak******************************************************************************/
164122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakextern void
165122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakcleanup()
166122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
167122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	/* Close all open file descriptors. */
168122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	if(close(fdw) == -1)
169122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	{
170122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
171122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		fnamew, errno, strerror(errno));
172122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	}
173122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
174122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	if(close(fdr) == -1)
175122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	{
176122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		tst_resm(TWARN, "close(%s) Failed, errno=%d : %s",
177122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		fnamer, errno, strerror(errno));
178122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	}
179122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
180122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak    	/* Remove tmp dir and all files in it */
181122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak    	tst_rmdir();
182122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
183122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	/* Exit with appropriate return code. */
184122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	tst_exit();
185122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
186122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak}
187122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
188122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
189122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Performs all one time setup for this test. This function is
190122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * used to create temporary dirs and temporary files
191122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * that may be used in the course of this test
192122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
193122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakvoid
194122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modaksetup()
195122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
196122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak 	/* capture signals */
197122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak    	tst_sig(FORK, DEF_HANDLER, cleanup);
198122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
199122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak    	/* Pause if that option was specified */
200122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak    	TEST_PAUSE;
201122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
202122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	 /* make a temp directory and cd to it */
203122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak    	tst_tmpdir();
204122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
205122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	sprintf(fnamer,"tfile_read_%d",getpid());
206122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	sprintf(fnamew,"tfile_write_%d",getpid());
207122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
208122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	if ((fdr = open(fnamer,O_RDONLY|O_CREAT,S_IRUSR)) == -1) {
209122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak 	       tst_brkm(TBROK, cleanup,   "open(%s,O_RDONLY|O_CREAT,S_IRUSR) Failed, errno=%d : %s",
210122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                fnamer, errno, strerror(errno));
211122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak    	}
212122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	if ((fdw = open(fnamew,O_RDWR|O_CREAT,S_IRWXU)) == -1) {
213122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak 	       tst_brkm(TBROK, cleanup,   "open(%s,O_RDWR|O_CREAT,S_IRWXU) Failed, errno=%d : %s",
214122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                fnamew, errno, strerror(errno));
215122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak    	}
216122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	get_blocksize(fdr);
217122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	populate_file();
218122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak}
219122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
220122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
221122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Gets the block size for the file system
222122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
223122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakvoid
224122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakget_blocksize(int fd)
225122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
226122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	 struct stat file_stat;
227122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
228122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	if( fstat(fd, &file_stat) < 0 )
229122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak           tst_resm(TFAIL, "fstat failed while getting block_size errno=%d : %s",
230122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		TEST_ERRNO, strerror(TEST_ERRNO));
231122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
232122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	block_size = (int) file_stat.st_blksize;
233122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	buf_size = block_size;
234122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak}
235122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
236122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
237122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Writes data into the file
238122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
239122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakvoid
240122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakpopulate_file()
241122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
242122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak        char buf[buf_size + 1];
243122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak        int index;
244122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak        int blocks;
245122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak        int data;
246122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak        for (blocks = 0; blocks < BLOCKS_WRITTEN ; blocks++)
247122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak        {
248122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                for (index = 0; index < buf_size; index++)
249122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                                buf[index] = 'A' + (index % 26);
250122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                buf[buf_size]='\0';
251122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                if (( data = write(fdw, buf, buf_size)) < 0 )
252122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                {
253122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                        tst_brkm(TBROK, cleanup, "Unable to write to %s. Error: %d, %s", \
254122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                        fnamew,errno, strerror(errno));
255122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak                }
256122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak        }
257122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak}
258122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
259122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
260122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
261122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Wraper function to call fallocate system call
262122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
263122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakstatic inline long fallocate(int fd, int mode, loff_t offset, loff_t len)
264122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
265df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak            #if __WORDSIZE == 32
266df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak            struct utsname buf;
267df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak            if ( uname(&buf) == 0 ){
268df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak                        if(!strcmp(buf.machine,"ppc64") || !strcmp(buf.machine,"x86_64"))
269df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak                            return syscall(__NR_fallocate, fd, mode, (int)(offset>>32), (int)offset ,(int)(len>>32), (int)len);
270df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak            }
271df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak            else{
272df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak                        perror("uname:");
273df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak                        return -1;
274df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak                        }
275df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak            #endif
276df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modak                        return syscall(__NR_fallocate, fd, mode,
277df18bd071ec40d9c7b3cc7a481f1c00c3b45b87asubrata_modakoffset,len);
278122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak}
279122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
280122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
281122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*****************************************************************************
282122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Main function that calls the system call with the  appropriate parameters
283122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/
284122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakint
285122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modakmain(int   ac,    /* number of command line parameters                      */
286122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak        char **av)   /* pointer to the array of the command line parameters.   */
287122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak{
288122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
289122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int test_index = 0;
290122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int lc;
291122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	int fd;
292122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	char fname[255], *msg;
293122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
294122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak    	/***************************************************************
295122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	     * parse standard options
296122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak     	***************************************************************/
297122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak    	if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
298122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
299122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
300122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	/* This test needs kernel version > 2.6.23 and
301122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	 * either of x86, x86_64 or ppc architecture
302122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	 */
303122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	if ( !arch_support || (tst_kvercmp(2,6,23) < 0)) {
304122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		tst_resm(TWARN," System doesn't support execution of the test");
305122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		exit(0);
306122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	}
307122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
308122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	/* perform global test setup, call setup() function. */
309122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	setup();
310122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
311122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	 for (lc=0; TEST_LOOPING(lc); lc++) {
312122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	        /* reset Tst_count in case we are looping. */
313122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak        	Tst_count=0;
314122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		for(test_index = 0 ; test_index < TST_TOTAL; test_index ++)
315122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		{
316122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak			switch(test_data[test_index].file){
317122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak			case RFILE: fd = fdr;
318122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak				strcpy(fname,fnamer);
319122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak				break;
320122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak			case WFILE: fd = fdw;
321122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak				strcpy(fname,fnamew);
322122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak				break;
323122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak			}
324122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
325122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		TEST(fallocate( fd, test_data[test_index].mode,
326122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		test_data[test_index].offset * block_size, test_data[test_index].len * block_size));
327122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak			 /* check return code */
328122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	        if ( TEST_ERRNO != test_data[test_index].error ) {
329122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak			if ( TEST_ERRNO == EOPNOTSUPP ) {
3306882569bf2db1b6c0910ba9690d55829bb53ec1csubrata_modak				tst_brkm( TCONF, cleanup, " fallocate system call" \
331122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak				" is not implemented");
332122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak			}
333122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	            TEST_ERROR_LOG(TEST_ERRNO);
334e312d9ee7dc1876f4f7d5ad985903caac35c2542subrata_modak	            tst_resm(TFAIL, "fallocate(%s:%d, %d, %lld, %lld) Failed, expected errno:%d \
335122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak				instead errno=%d : %s", fname, fd,test_data[test_index].mode,
336122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak				test_data[test_index].offset * block_size, test_data[test_index].len * block_size,
337122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak				test_data[test_index].error, TEST_ERRNO, strerror(TEST_ERRNO));
338122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		 } else {
339122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		        /* No Verification test, yet... */
340e312d9ee7dc1876f4f7d5ad985903caac35c2542subrata_modak		        tst_resm(TPASS, "fallocate(%s:%d, %d, %lld, %lld) returned %d ",
341122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak			fname, fd,test_data[test_index].mode, test_data[test_index].offset * block_size,
342122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak			test_data[test_index].len * block_size, TEST_ERRNO);
343122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak        		}
344122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak		}
345122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	}
346122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak	cleanup();
34743337a3cf6f8809647cf9fc6c0054241f44b1fb1subrata_modak	return 0;
348122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak}
349122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak
350