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