fallocate02.c revision 4bb656a129f7507823e9e6d6b98b1a02fd80ef89
1122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak 2122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/****************************************************************************** 34bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * fallocate02.c 4122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Mon Dec 24 2007 54bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * Copyright (c) International Business Machines Corp., 2007 6122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak * Emali : sharyathi@in.ibm.com 7122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak ******************************************************************************/ 8122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak 9122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak 10122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/*************************************************************************** 114bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * This program is free software; you can redistribute it and/or modify 124bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * it under the terms of the GNU General Public License as published by 134bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * the Free Software Foundation; either version 2 of the License, or 144bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_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 604bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_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; 1434bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak int error; 1444bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_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; 1554bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modakint buf_size; 156122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak 157122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak 158122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak/****************************************************************************** 1594bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * Performs all one time clean up for this test on successful 1604bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * completion, premature exit or failure. Closes all temporary 1614bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * files, removes all temporary directories exits the test with 1624bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_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/***************************************************************************** 1894bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_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 */ 1974bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_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 ) 2294bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_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 3014bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_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; 3234bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak } 324122c603f55a00c3bb7667ba8fdfd2a6cf83d9787subrata_modak 3254bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_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 \ 3354bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak instead errno=%d : %s", fname, fd,test_data[test_index].mode, 3364bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_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 ", 3414bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_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