Vijay,
Vijay Kumar wrote:
B. N. Poornima wrote:
I am re sending the patch with the above modifications. Please test
and let me know. Thanks!
[clip]
--- ltp-full-20080731.original/include/linux_syscall_numbers.h
2008-07-21 16:08:43.000000000 +0530
+++ ltp-full-20080731/include/linux_syscall_numbers.h 2008-08-18
12:42:06.000000000 +0530
@@ -381,6 +381,9 @@
# ifndef __NR_faccessat
# define __NR_faccessat (__NR_openat + 12)
# endif
+# ifndef __NR_sync_file_range2
+# define __NR_sync_file_range2 308
+# endif
There are few issues with this patch.
1. The patch is modifying a generated file linux_syscall_numbers.h.
The files in testcases/kernel/include/*.in should have been modified.
Thanks for the input. I am attaching the modified patch with the above
correction.
2. When the patch was committed the generated file got added to the
CVS repository.
I did not understand the problem here. Is there anything expected from
my end?
Regards,
Vijay
Regards,
Poornima.
--- ltp-full-20080731.original/testcases/kernel/syscalls/sync_file_range/sync_file_range01.c 1970-01-01 05:30:00.000000000 +0530
+++ ltp-full-20080731/testcases/kernel/syscalls/sync_file_range/sync_file_range01.c 2008-08-18 15:05:04.000000000 +0530
@@ -0,0 +1,345 @@
+/******************************************************************************
+ * sync_file_range01.c
+ * Copyright (c) International Business Machines Corp., 2008
+ * Email: [EMAIL PROTECTED]
+ *****************************************************************************/
+
+/******************************************************************************/
+/* */
+/* This program is free software; you can redistribute it and/or modify */
+/* it under the terms of the GNU General Public License as published by */
+/* the Free Software Foundation; either version 2 of the License, or */
+/* (at your option) any later version. */
+/* */
+/* This program is distributed in the hope that it will be useful, */
+/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
+/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */
+/* the GNU General Public License for more details. */
+/* */
+/* You should have received a copy of the GNU General Public License */
+/* along with this program; if not, write to the Free Software */
+/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+/* */
+/******************************************************************************/
+
+
+/*****************************************************************************
+ * TEST IDENTIFIER : sync_file_range01
+ *
+ * EXECUTED BY : anyone
+ *
+ * TEST TITLE : Checks for Errors from sync_file_range()
+ *
+ * TEST CASE TOTAL : 5
+ *
+ * CPU ARCHITECTURES : All
+ *
+ * AUTHOR : B N Poornima
+ *
+ * DATE STARTED : 21/07/2008
+ *
+ * TEST CASES
+ * (Tests sync_file_range() for different test cases as reported in the man
+ * page)
+ *
+ * INPUT SPECIFICATIONS
+ * No input needs to be specified
+ * sync_file_data() in-puts are specified through test_data
+ *
+ * OUTPUT SPECIFICATIONS
+ * sync_file_data() error message matches with the expected error
+ * message.
+ *
+ * ENVIRONMENTAL NEEDS
+ * Kernel version 2.6.17 and above
+ * Kernel version 2.6.22 and above in case of PPC and PPC64
+ *
+ * SPECIAL PROCEDURAL REQUIREMENTS
+ * None
+ *
+ * DETAILED DESCRIPTION
+ * This is a test case for sync_file_range() system call.
+ * This test suite tests various error messages from the system call
+ * If the error message received matches with the expected
+ * test is considered passed else test fails
+ *
+ * Total 5 Test Cases :-
+ * Various error messages from the man page
+ *
+ * Setup:
+ * Setup files on which sync_file_range is to be called
+ *
+ * Test:
+ * Loop if the proper options are given.
+ * Execute system call
+ * Check return code.
+ * If error obtained matches with the expected error
+ * PASS the test, otherwise TEST FAILS
+ *
+ * Cleanup:
+ * Cleanup the temporary folder
+ *
+ ******************************************************************************/
+#define _GNU_SOURCE
+
+/* Standard Include Files */
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <sys/utsname.h>
+#include <unistd.h>
+
+/* Harness Specific Include Files. */
+#include "test.h"
+#include "usctest.h"
+#include "linux_syscall_numbers.h"
+
+
+#if defined(__powerpc__) || defined(__powerpc64__)
+ #ifndef __NR_sync_file_range2
+ #define __NR_sync_file_range2 -1 //DUMMY VALUE
+ int arch_support = 0; //Architecure is not supported
+ #else
+ int arch_support = 1; //Architecture is supported
+ #endif
+#else
+ #ifndef __NR_sync_file_range
+ #define __NR_sync_file_range -1 //DUMMY Value
+ int arch_support = 0;
+ #else
+ int arch_support = 1;
+ #endif
+#endif
+
+
+#ifndef SYNC_FILE_RANGE_WAIT_BEFORE
+#define SYNC_FILE_RANGE_WAIT_BEFORE 1
+#define SYNC_FILE_RANGE_WRITE 2 //DUMMY VALUES
+#define SYNC_FILE_RANGE_WAIT_AFTER 4
+#endif
+
+#define SYNC_FILE_RANGE_INVALID 8
+
+/* Extern Global Variables */
+extern int Tst_count; /* counter for tst_xxx routines. */
+extern char *TESTDIR; /* temporary dir created by tst_tmpdir() */
+
+/* Global Variables */
+char *TCID = "sync_file_range01"; /* test program identifier. */
+char filename[255]; /* file used for testing */
+char spl_file[] = "/dev/null";
+int filed, sfd; /* normal and special fds */
+int bfd = -1; /* Bad file descriptor */
+
+struct test_data_t
+{
+ int *fd;
+ off64_t offset;
+ off64_t nbytes;
+ unsigned int flags;
+ int error;
+} test_data[] = {
+ {&bfd, 0, 1, SYNC_FILE_RANGE_WRITE, EBADF},
+ {&sfd, 0, 1, SYNC_FILE_RANGE_WAIT_AFTER, ESPIPE},
+ {&filed, -1, 1, SYNC_FILE_RANGE_WAIT_BEFORE, EINVAL},
+ {&filed, 0, -1, SYNC_FILE_RANGE_WRITE, EINVAL},
+ {&filed, 0, 1, SYNC_FILE_RANGE_INVALID, EINVAL}
+ };
+
+int TST_TOTAL = sizeof(test_data) / sizeof(test_data[0]);
+
+
+
+
+/* Extern Global Functions */
+/******************************************************************************/
+/* */
+/* Function: cleanup */
+/* */
+/* Description: Performs all one time clean up for this test on successful */
+/* completion, premature exit or failure. Closes all temporary */
+/* files, removes all temporary directories exits the test with */
+/* appropriate return code by calling tst_exit() function. */
+/* */
+/* Input: None. */
+/* */
+/* Output: None. */
+/* */
+/* Return: On failure - Exits calling tst_exit(). Non '0' return code. */
+/* On success - Exits calling tst_exit(). With '0' return code. */
+/* */
+/******************************************************************************/
+extern void
+cleanup()
+{
+ /*
+ * print timing stats if that option was specified.
+ * print errno log if that option was specified.
+ */
+ TEST_CLEANUP;
+
+ /* close the file we have open */
+ if (close(filed) == -1) {
+ tst_resm(TWARN, "close(%s) Failed, errno=%d : %s", filename, errno, strerror(errno));
+ }
+
+ /* Remove tmp dir and all files in it */
+ tst_rmdir();
+
+ /* exit with return code appropriate for results */
+ tst_exit();
+
+ tst_exit();
+}
+
+
+/* Local Functions */
+/******************************************************************************/
+/* */
+/* Function: setup */
+/* */
+/* Description: Performs all one time setup for this test. This function is */
+/* typically used to capture signals, create temporary dirs */
+/* and temporary files that may be used in the course of this */
+/* test. */
+/* */
+/* Input: None. */
+/* */
+/* Output: None. */
+/* */
+/* Return: On failure - Exits by calling cleanup(). */
+/* On success - returns 0. */
+/* */
+/******************************************************************************/
+void
+setup()
+{
+/* capture signals */
+ tst_sig(NOFORK, DEF_HANDLER, cleanup);
+
+ /* Pause if that option was specified */
+ TEST_PAUSE;
+
+ /* make a temp directory and cd to it */
+ tst_tmpdir();
+
+ sprintf(filename,"tmpfile_%d",getpid());
+ if ((filed = open(filename,O_RDWR|O_CREAT,0700)) == -1) {
+ tst_brkm(TBROK, cleanup,
+ "open(%s, O_RDWR|O_CREAT,0700) Failed, errno=%d : %s",
+ filename, errno, strerror(errno));
+
+ sfd = open(spl_file, O_RDWR|O_CREAT, 0700);
+
+ }
+
+return;
+}
+
+/*****************************************************************************
+ * Wraper function to call sync_file_range system call
+ ******************************************************************************/
+static inline long syncfilerange(int fd, off64_t offset, off64_t nbytes, unsigned int flags)
+{
+
+ #if defined(__powerpc64__) && (__WORDSIZE==32)
+
+ return syscall(__NR_sync_file_range2, fd, flags, (int)(offset >>32), \
+ (int)offset, (int)(nbytes >>32), (int)nbytes);
+
+ #elif defined(__powerpc64__) && (__WORDSIZE==64)
+
+ return syscall(__NR_sync_file_range2, fd, flags, offset, nbytes);
+ #else
+
+ return syscall(__NR_sync_file_range, fd, offset, nbytes, flags);
+ #endif
+
+ return 0;
+}
+
+
+
+
+
+/******************************************************************************/
+/* */
+/* Function: main */
+/* */
+/* Description: Entry point to this test-case. It parses all the command line */
+/* inputs, calls the global setup and executes the test. It logs */
+/* the test status and results appropriately using the LTP API's */
+/* On successful completion or premature failure, cleanup() func */
+/* is called and test exits with an appropriate return code. */
+/* */
+/* Input: Describe input arguments to this test-case */
+/* -l - Number of iteration */
+/* -v - Prints verbose output */
+/* -V - Prints the version number */
+/* */
+/* Exit: On failure - Exits by calling cleanup(). */
+/* On success - exits with 0 exit value. */
+/* */
+/******************************************************************************/
+int
+main(int ac, /* number of command line parameters */
+ char **av) /* pointer to the array of the command line parameters. */
+{
+
+ int test_index = 0;
+ int lc;
+ char *msg;
+
+ /***************************************************************
+ parse standard options
+ ********************************************************************/
+ if ( (msg=parse_opts(ac, av, (option_t *) NULL, NULL)) != (char *) NULL )
+ tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg);
+
+ /* This test needs kernel version > 2.6.16 */
+
+ if ( !arch_support || (tst_kvercmp(2,6,17) < 0)) {
+ tst_resm(TCONF, "System doesn't support execution of the test");
+ tst_exit();
+ }
+
+
+/* perform global test setup, call setup() function. */
+setup();
+
+for (lc=0; TEST_LOOPING(lc); lc++) {
+ /* reset Tst_count in case we are looping. */
+ Tst_count=0;
+
+ for(test_index = 0 ; test_index < TST_TOTAL; test_index ++)
+ {
+ TEST(syncfilerange(*(test_data[test_index].fd), test_data[test_index].offset, \
+ test_data[test_index].nbytes, test_data[test_index].flags));
+
+
+ if (TEST_RETURN != -1) {
+ tst_resm(TFAIL, "call succeeded unexpectedly");
+ continue;
+ }
+
+ TEST_ERROR_LOG(TEST_ERRNO);
+
+ if (TEST_ERRNO == test_data[test_index].error) {
+ tst_resm(TPASS, "expected failure - "
+ "errno = %d : %s", TEST_ERRNO,
+ strerror(TEST_ERRNO));
+ } else {
+ tst_resm(TFAIL, "unexpected error - %d : %s - "
+ "expected %d", TEST_ERRNO,
+ strerror(TEST_ERRNO), test_data[test_index].error);
+ }
+ }
+
+ }
+
+cleanup();
+return(0);
+}
--- ltp-full-20080731.original/testcases/kernel/syscalls/sync_file_range/Makefile 1970-01-01 05:30:00.000000000 +0530
+++ ltp-full-20080731/testcases/kernel/syscalls/sync_file_range/Makefile 2008-08-08 17:34:28.000000000 +0530
@@ -0,0 +1,31 @@
+#
+# Copyright (c) International Business Machines Corp., 2001
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+CFLAGS += -I../../../../include -Wall
+LDLIBS += -L../../../../lib -lltp
+
+SRCS = $(wildcard *.c)
+TARGETS = $(patsubst %.c,%,$(SRCS))
+
+all: $(TARGETS)
+
+install:
+ @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
+
+clean:
+ rm -f $(TARGETS)
--- ltp-full-20080731.original/runtest/syscalls 2008-07-26 09:45:36.000000000 +0530
+++ ltp-full-20080731/runtest/syscalls 2008-08-11 14:49:56.000000000 +0530
@@ -906,6 +906,9 @@ symlinkat01 symlinkat01
sync01 sync01
sync02 sync02
+#testcases for sync_file_range
+sync_file_range01 sync_file_range01
+
syscall01 syscall01
sysconf01 sysconf01
--- ltp-full-20080731.original/testcases/kernel/include/linux_syscall_numbers.h 2008-07-21 16:08:43.000000000 +0530
+++ ltp-full-20080731/testcases/kernel/include/linux_syscall_numbers.h 2008-08-20 17:36:10.000000000 +0530
@@ -381,6 +381,9 @@
# ifndef __NR_faccessat
# define __NR_faccessat (__NR_openat + 12)
# endif
+# ifndef __NR_sync_file_range2
+# define __NR_sync_file_range2 308
+# endif
# ifndef __NR_fallocate
# define __NR_fallocate 309
# endif
@@ -454,6 +457,9 @@
# ifndef __NR_faccessat
# define __NR_faccessat (__NR_openat + 12)
# endif
+# ifndef __NR_sync_file_range2
+# define __NR_sync_file_range2 308
+# endif
# ifndef __NR_fallocate
# define __NR_fallocate 309
# endif
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list