On Mon, 2009-01-26 at 18:27 -0800, CAI Qian wrote: > Hi, > > Paccept() has not been accepted upstream, and accept4() has already been > tested in LTP, which > does the pretty much same thing as the test here, > > http://lkml.org/lkml/2008/10/26/123 > > Hence, remove this test. > > Signed-off-by: CAI Qian <[email protected]>
True. When i tested on my latest kernel build, i also happened to discover that: # uname -a Linux 2.6.28-gcov #1 SMP Fri Jan 23 15:28:12 IST 2009 x86_64 x86_64 x86_64 GNU/Linux # ./testcases/kernel/syscalls/accept4/accept4_01 accept04_01 1 PASS : Test passed accept04_01 2 PASS : Test passed accept04_01 3 PASS : Test passed accept04_01 4 PASS : Test passed # ./testcases/kernel/syscalls/paccept/paccept01 paccept01 1 FAIL : paccept(SOCK_CLOEXEC) does not set close-on-exec flag # ./testcases/kernel/syscalls/paccept/paccept02 paccept02 1 FAIL : paccept(SOCK_NONBLOCK) does not set non-blocking mode Thanks. Regards-- Subrata > > --- testcases/kernel/syscalls/paccept/Makefile 2009-01-16 > 18:05:22.000000000 +0800 > +++ /dev/null 2009-01-26 12:18:16.395003232 +0800 > @@ -1,31 +0,0 @@ > -# > -# Copyright (c) International Business Machines Corp., 2009 > -# > -# 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 -lpthread > - > -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) > --- testcases/kernel/syscalls/paccept/paccept01.c 2009-01-16 > 18:05:22.000000000 +0800 > +++ /dev/null 2009-01-26 12:18:16.395003232 +0800 > @@ -1,307 +0,0 @@ > -/******************************************************************************/ > -/* > */ > -/* Copyright (c) Ulrich Drepper <[email protected]> > */ > -/* Copyright (c) International Business Machines Corp., 2009 > */ > -/* > */ > -/* 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 > */ > -/* > */ > -/******************************************************************************/ > -/******************************************************************************/ > -/* > */ > -/* File: paccept01.c > */ > -/* > */ > -/* Description: This Program tests the new system call introduced in 2.6.27. > */ > -/* Ulrich´s comment as in: > */ > -/* > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=aaca0bdca573f3f51ea03139f9c7289541e7bca3 > */ > -/* says: > */ > -/* flag parameters: paccept. This patch is by far the most > */ > -/* complex in the series. It adds a new syscall paccept. This > */ > -/* syscall differs from accept in that it adds (at the > userlevel)*/ > -/* two additional parameters: > */ > -/* - a signal mask > */ > -/* - a flags value > */ > -/* > */ > -/* The flags parameter can be used to set flag like > SOCK_CLOEXEC.*/ > -/* This is imlpemented here as well. Some people argued that > */ > -/* this is a property which should be inherited from the file > */ > -/* desriptor for the server but this is against > POSIX.Additionally*/ > -/* ,we really want the signal mask parameter as well (similar > to */ > -/* pselect, ppoll, etc). So an interface change in inevitable. > */ > -/* The flag value is the same as for socket and socketpair. I > */ > -/* think diverging here will only create confusion. Similar to > */ > -/* the filesystem interfaces where the use of the O_* constants > */ > -/* differs, it is acceptable here. The signal mask is handled > as */ > -/* for pselect etc. The mask is temporarily installed for the > */ > -/* thread and removed before the call returns. I modeled the > */ > -/* code after pselect. If there is a problem it's likely also > in*/ > -/* pselect. For architectures which use socketcall I maintained > */ > -/* this interface instead of adding a system call. The > symmetry */ > -/* shouldn't be broken. The following test must be adjusted for > */ > -/* architectures other than x86 and x86-64 and in case the > */ > -/* syscall numbers changed. > */ > -/* > */ > -/* Usage: <for command-line> > */ > -/* paccept01 [-c n] [-e][-i n] [-I x] [-p x] [-t] > */ > -/* where, -c n : Run n copies concurrently. > */ > -/* -e : Turn on errno logging. > */ > -/* -i n : Execute test n times. > */ > -/* -I x : Execute test for x seconds. > */ > -/* -P x : Pause for x seconds between iterations. > */ > -/* -t : Turn on syscall timing. > */ > -/* > */ > -/* Total Tests: 1 > */ > -/* > */ > -/* Test Name: paccept01 > */ > -/* > */ > -/* Author: Ulrich Drepper <[email protected]> > */ > -/* > */ > -/* History: Created - Jan 06 2009 - Ulrich Drepper <[email protected]> > */ > -/* Ported to LTP > */ > -/* - Jan 06 2009 - Subrata <[email protected]> > */ > -/******************************************************************************/ > -#include <errno.h> > -#include <fcntl.h> > -#include <pthread.h> > -#include <signal.h> > -#include <stdio.h> > -#include <unistd.h> > -#include <netinet/in.h> > -#include <sys/socket.h> > -#include <sys/syscall.h> > - > -/* Harness Specific Include Files. */ > -#include "test.h" > -#include "usctest.h" > - > -#ifndef O_CLOEXEC > - #define O_CLOEXEC 02000000 > -#endif > - > -#ifndef __NR_paccept > - #ifdef __x86_64__ > - #define __NR_paccept 288 > - #elif defined __i386__ > - #define SYS_PACCEPT 18 > - #define USE_SOCKETCALL 1 > - #else > - #error "need __NR_paccept" > - #endif > -#endif > - > -#ifdef USE_SOCKETCALL > - #define paccept(fd, addr, addrlen, mask, flags) \ > - ({ long args[6] = { \ > - (long) fd, (long) addr, (long) addrlen, (long) mask, 8, (long) flags > }; \ > - syscall (__NR_socketcall, SYS_PACCEPT, args); }) > -#else > - #define paccept(fd, addr, addrlen, mask, flags) \ > - syscall (__NR_paccept, fd, addr, addrlen, mask, 8, flags) > -#endif > - > -#define PORT 57392 > -#define SOCK_CLOEXEC O_CLOEXEC > - > -static pthread_barrier_t b; > - > -/* 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 = "paccept01"; /* test program identifier. > */ > -int testno; > -int TST_TOTAL = 1; /* total number of tests in this file. > */ > - > -/* 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() { > - /* Remove tmp dir and all files in it */ > - TEST_CLEANUP; > - tst_rmdir(); > - > - /* Exit with appropriate return code. */ > - 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 if any */ > - /* Create temporary directories */ > - TEST_PAUSE; > - tst_tmpdir(); > -} > - > - > -static void * tf (void *arg) { > - pthread_barrier_wait (&b); > - int s = socket (AF_INET, SOCK_STREAM, 0); > - struct sockaddr_in sin; > - sin.sin_family = AF_INET; > - sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK); > - sin.sin_port = htons (PORT); > - connect (s, (const struct sockaddr *) &sin, sizeof (sin)); > - close (s); > - > - pthread_barrier_wait (&b); > - s = socket (AF_INET, SOCK_STREAM, 0); > - sin.sin_port = htons (PORT); > - connect (s, (const struct sockaddr *) &sin, sizeof (sin)); > - close (s); > - pthread_barrier_wait (&b); > - > - pthread_barrier_wait (&b); > - sleep (2); > - pthread_kill ((pthread_t) arg, SIGUSR1); > - return NULL; > -} > - > -static void handler (int s) { > -} > - > -int main (int argc, char *argv[]) { > - int s,s2, coe, reuse; > - pthread_barrier_init (&b, NULL, 2); > - struct sockaddr_in sin; > - pthread_t th; > - int lc; /* loop counter */ > - char *msg; /* message returned from parse_opts */ > - > - /* Parse standard options given to run the test. */ > - msg = parse_opts(argc, argv, (option_t *) NULL, NULL); > - if (msg != (char *) NULL) { > - tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg); > - tst_exit(); > - } > - if((tst_kvercmp(2, 6, 27)) < 0) { > - tst_resm(TCONF, "This test can only run on kernels that are > 2.6.27 and higher"); > - tst_exit(); > - } > - setup(); > - > - if (pthread_create (&th, NULL, tf, (void *) pthread_self ()) != 0) { > - tst_brkm(TBROK, cleanup, "pthread_create failed"); > - tst_exit(); > - } > - > - /* Check looping state if -i option given */ > - for (lc = 0; TEST_LOOPING(lc); ++lc) { > - Tst_count = 0; > - for (testno=0; testno < TST_TOTAL; ++testno) { > - s = socket(AF_INET, SOCK_STREAM, 0); > - reuse = 1; > - setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof (reuse)); > - sin.sin_family = AF_INET; > - sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK); > - sin.sin_port = htons (PORT); > - bind(s, (struct sockaddr *) &sin, sizeof (sin)); > - listen(s, SOMAXCONN); > - > - pthread_barrier_wait (&b); > - > - s2 = paccept(s, NULL, 0, NULL, 0); > - if (s2 < 0) { > - tst_resm(TFAIL, "paccept(0) failed"); > - cleanup(); > - tst_exit(); > - } > - > - coe = fcntl(s2, F_GETFD); > - if (coe & FD_CLOEXEC) { > - tst_resm(TFAIL, "paccept(0) set close-on-exec-flag"); > - cleanup(); > - tst_exit(); > - } > - close (s2); > - > - pthread_barrier_wait (&b); > - s2 = paccept(s, NULL, 0, NULL, SOCK_CLOEXEC); > - if (s2 < 0) { > - tst_resm(TFAIL, "paccept(SOCK_CLOEXEC) failed"); > - cleanup(); > - tst_exit(); > - } > - > - coe = fcntl(s2, F_GETFD); > - if ((coe & FD_CLOEXEC) == 0) { > - tst_resm(TFAIL, "paccept(SOCK_CLOEXEC) does not set > close-on-exec flag"); > - cleanup(); > - tst_exit(); > - } > - close(s2); > - > - pthread_barrier_wait (&b); > - > - struct sigaction sa; > - sa.sa_handler = handler; > - sa.sa_flags = 0; > - sigemptyset (&sa.sa_mask); > - sigaction (SIGUSR1, &sa, NULL); > - > - sigset_t ss; > - pthread_sigmask (SIG_SETMASK, NULL, &ss); > - sigaddset (&ss, SIGUSR1); > - pthread_sigmask (SIG_SETMASK, &ss, NULL); > - > - sigdelset (&ss, SIGUSR1); > - alarm (4); > - pthread_barrier_wait (&b); > - > - errno = 0 ; > - s2 = paccept(s, NULL, 0, &ss, 0); > - if (s2 != -1 || errno != EINTR) { > - tst_resm(TFAIL, "paccept did not fail with EINTR"); > - cleanup(); > - tst_exit(); > - } > - close (s); > - tst_resm(TPASS, "paccept(SOCK_CLOEXEC) PASSED"); > - cleanup(); > - } > - } > - tst_exit(); > -} > > --- testcases/kernel/syscalls/paccept/paccept02.c 2009-01-16 > 18:28:20.000000000 +0800 > +++ /dev/null 2009-01-26 12:18:16.395003232 +0800 > -/******************************************************************************/ > -/* > */ > -/* Copyright (c) Ulrich Drepper <[email protected]> > */ > -/* Copyright (c) International Business Machines Corp., 2009 > */ > -/* > */ > -/* 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 > */ > -/* > */ > -/******************************************************************************/ > -/******************************************************************************/ > -/* > */ > -/* File: paccept02.c > */ > -/* > */ > -/* Description: This Program tests the new system call introduced in 2.6.27. > */ > -/* Ulrich´s comment as in: > */ > -/* > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=77d2720059618b9b6e827a8b73831eb6c6fad63c > */ > -/* > */ > -/* Usage: <for command-line> > */ > -/* paccept02 [-c n] [-e][-i n] [-I x] [-p x] [-t] */ > -/* where, -c n : Run n copies concurrently. > */ > -/* -e : Turn on errno logging. > */ > -/* -i n : Execute test n times. > */ > -/* -I x : Execute test for x seconds. > */ > -/* -P x : Pause for x seconds between iterations. > */ > -/* -t : Turn on syscall timing. > */ > -/* > */ > -/* Total Tests: 1 > */ > -/* > */ > -/* Test Name: paccept02 > */ > -/* > */ > -/* Author: Ulrich Drepper <[email protected]> > */ > -/* > */ > -/* History: Created - Jan 13 2009 - Ulrich Drepper <[email protected]> > */ > -/* Ported to LTP > */ > -/* - Jan 13 2009 - Subrata <[email protected]> > */ > -/******************************************************************************/ > -#include <fcntl.h> > -#include <pthread.h> > -#include <stdio.h> > -#include <unistd.h> > -#include <netinet/in.h> > -#include <sys/socket.h> > -#include <sys/syscall.h> > - > -/* Harness Specific Include Files. */ > -#include "test.h" > -#include "usctest.h" > - > -#ifndef __NR_paccept > -# ifdef __x86_64__ > -# define __NR_paccept 288 > -# elif defined __i386__ > -# define SYS_PACCEPT 18 > -# define USE_SOCKETCALL 1 > -# else > -# error "need __NR_paccept" > -# endif > -#endif > - > -#ifdef USE_SOCKETCALL > -# define paccept(fd, addr, addrlen, mask, flags) \ > - ({ long args[6] = { \ > - (long) fd, (long) addr, (long) addrlen, (long) mask, 8, (long) flags > }; \ > - syscall (__NR_socketcall, SYS_PACCEPT, args); }) > -#else > -# define paccept(fd, addr, addrlen, mask, flags) \ > - syscall (__NR_paccept, fd, addr, addrlen, mask, 8, flags) > -#endif > - > -#define PORT 57392 > - > -#define SOCK_NONBLOCK O_NONBLOCK > - > -static pthread_barrier_t b; > - > -static void * tf (void *arg) { > - pthread_barrier_wait (&b); > - int s = socket (AF_INET, SOCK_STREAM, 0); > - struct sockaddr_in sin; > - sin.sin_family = AF_INET; > - sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK); > - sin.sin_port = htons (PORT); > - connect (s, (const struct sockaddr *) &sin, sizeof (sin)); > - close (s); > - pthread_barrier_wait (&b); > - > - pthread_barrier_wait (&b); > - s = socket (AF_INET, SOCK_STREAM, 0); > - sin.sin_port = htons (PORT); > - connect (s, (const struct sockaddr *) &sin, sizeof (sin)); > - close (s); > - pthread_barrier_wait (&b); > - return NULL; > -} > - > -/* 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 = "paccept02"; /* test program identifier. */ > -int testno; > -int TST_TOTAL = 1; /* total number of tests in this file. > */ > - > -/* 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() { > - /* Remove tmp dir and all files in it */ > - TEST_CLEANUP; > - tst_rmdir(); > - > - /* Exit with appropriate return code. */ > - 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 if any */ > - /* Create temporary directories */ > - TEST_PAUSE; > - tst_tmpdir(); > -} > - > -int main (int argc, char *argv[]) { > - int s, fl, s2, reuse; > - struct sockaddr_in sin; > - pthread_t th; > - int lc; /* loop counter */ > - char *msg; /* message returned from parse_opts */ > - > - /* Parse standard options given to run the test. */ > - msg = parse_opts(argc, argv, (option_t *) NULL, NULL); > - if (msg != (char *) NULL) { > - tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg); > - tst_exit(); > - } > - if((tst_kvercmp(2, 6, 27)) < 0) { > - tst_resm(TCONF, "This test can only run on kernels that are > 2.6.27 and higher"); > - tst_exit(); > - } > - setup(); > - > - /* Check looping state if -i option given */ > - for (lc = 0; TEST_LOOPING(lc); ++lc) { > - Tst_count = 0; > - for (testno=0; testno < TST_TOTAL; ++testno) { > - pthread_barrier_init (&b, NULL, 2); > - if (pthread_create (&th, NULL, tf, NULL) != 0) { > - tst_brkm(TBROK, cleanup, "pthread_create failed"); > - tst_exit(); > - } > - > - s = socket (AF_INET, SOCK_STREAM, 0); > - reuse = 1; > - setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof (reuse)); > - sin.sin_family = AF_INET; > - sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK); > - sin.sin_port = htons (PORT); > - bind (s, (struct sockaddr *) &sin, sizeof (sin)); > - listen (s, SOMAXCONN); > - > - pthread_barrier_wait (&b); > - > - s2 = paccept (s, NULL, 0, NULL, 0); > - if (s2 < 0) { > - tst_resm(TFAIL, "paccept(0) failed"); > - cleanup(); > - tst_exit(); > - } > - > - fl = fcntl (s2, F_GETFL); > - if (fl & O_NONBLOCK) { > - tst_resm(TFAIL, "paccept(0) set non-blocking mode"); > - cleanup(); > - tst_exit(); > - } > - close (s2); > - close (s); > - > - pthread_barrier_wait (&b); > - > - s = socket (AF_INET, SOCK_STREAM, 0); > - sin.sin_port = htons (PORT); > - setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof (reuse)); > - bind (s, (struct sockaddr *) &sin, sizeof (sin)); > - listen (s, SOMAXCONN); > - > - pthread_barrier_wait (&b); > - > - s2 = paccept (s, NULL, 0, NULL, SOCK_NONBLOCK); > - if (s2 < 0) { > - tst_resm(TFAIL, "paccept(SOCK_NONBLOCK) failed"); > - cleanup(); > - tst_exit(); > - } > - > - fl = fcntl (s2, F_GETFL); > - if ((fl & O_NONBLOCK) == 0) { > - tst_resm(TFAIL, "paccept(SOCK_NONBLOCK) does not set > non-blocking mode"); > - cleanup(); > - tst_exit(); > - } > - close (s2); > - close (s); > - pthread_barrier_wait (&b); > - tst_resm(TPASS, "paccept(SOCK_NONBLOCK) PASSED"); > - cleanup(); > - } > - } > - tst_exit(); > -} > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > SourcForge Community > SourceForge wants to tell your story. > http://p.sf.net/sfu/sf-spreadtheword > _______________________________________________ > Ltp-list mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/ltp-list ------------------------------------------------------------------------------ This SF.net email is sponsored by: SourcForge Community SourceForge wants to tell your story. http://p.sf.net/sfu/sf-spreadtheword _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
