From: Andi K. <ak...@su...> - 2004-01-26 15:39:00
|
While running LTP on x86-64 I often get hangs in the EFAULT test in syslog12. The reason is that it tries to test for the EFAULT handling by passing an illegal address to syslog(2, ...). The kernel then first waits for an event in the log buffer before copying out the data and possibly noticing the EFAULT condition. But when the kernel log buffer is empty and nothing logs a new event the test hangs forever. This patch just adds a 1s timeout to at least prevent the hang. Better would be probably to just remove this one because I cannot see how it should be made to work reliably. -Andi diff -u testcases/kernel/syscalls/syslog/syslog12.c-o testcases/kernel/syscalls/syslog/syslog12.c --- testcases/kernel/syscalls/syslog/syslog12.c-o 2004-01-26 18:27:04.316272920 +0100 +++ testcases/kernel/syscalls/syslog/syslog12.c 2004-01-26 18:33:58.539301448 +0100 @@ -77,6 +77,7 @@ #include <pwd.h> #include <sys/types.h> #include <unistd.h> +#include <signal.h> #include <linux/unistd.h> #include "test.h" #include "usctest.h" @@ -125,11 +126,19 @@ int TST_TOTAL = sizeof(tdat) / sizeof(tdat[0]); +void +timeout(int sig) +{ + tst_resm(TFAIL, "syslog() timeout after 1s" + " for %s (test broken?)", tdat[testno].desc); +} + int main(int argc, char **argv) { int lc; /* loop counter */ char *msg; /* message returned from parse_opts */ + struct sigaction sa; /* parse standard options */ if ((msg = parse_opts(argc, argv, (option_t *)NULL, NULL)) != @@ -139,6 +148,11 @@ setup(); + memset(&sa, 0, sizeof(struct sigaction)); + sa.sa_handler = timeout; + sa.sa_flags = 0; + sigaction(SIGALRM, &sa, NULL); + /* check looping state if -i option is given */ for (lc = 0; TEST_LOOPING(lc); lc++) { /* reset Tst_count in case we are looping */ @@ -151,9 +165,13 @@ continue; } + alarm(1); + TEST(syslog(tdat[testno].type, tdat[testno].buf, tdat[testno].len)); + alarm(0); + TEST_ERROR_LOG(TEST_ERRNO); if ( (TEST_RETURN == EXP_RET_VAL) && (TEST_ERRNO == tdat[testno].exp_errno) ) { |
From: Robert W. <ro...@us...> - 2004-01-26 22:30:07
|
Thanks a lot!!! This test was also hanging for us, intermittently and it was driving me crazy!! Applied this to our CVS tree. -Robbie Robert V. Williamson <ro...@us...> Linux Test Project IBM Linux Technology Center Web: http://www.linuxtestproject.org IRC: #ltp on freenode.irc.net ==================== "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former." -Albert Einstein ltp...@li... wrote on 01/26/2004 09:38:52 AM: > > > While running LTP on x86-64 I often get hangs in the EFAULT test in syslog12. > > The reason is that it tries to test for the EFAULT handling by passing an > illegal address to syslog(2, ...). The kernel then first waits for an > event in the log buffer before copying out the data and possibly noticing > the EFAULT condition. But when the kernel log buffer is empty and nothing > logs a new event the test hangs forever. > > This patch just adds a 1s timeout to at least prevent the hang. > > Better would be probably to just remove this one because I cannot see how > it should be made to work reliably. > > -Andi > > diff -u testcases/kernel/syscalls/syslog/syslog12.c-o > testcases/kernel/syscalls/syslog/syslog12.c > --- testcases/kernel/syscalls/syslog/syslog12.c-o 2004-01-26 18:27:04.316272920 +0100 > +++ testcases/kernel/syscalls/syslog/syslog12.c 2004-01-26 18:33:58.539301448 +0100 > @@ -77,6 +77,7 @@ > #include <pwd.h> > #include <sys/types.h> > #include <unistd.h> > +#include <signal.h> > #include <linux/unistd.h> > #include "test.h" > #include "usctest.h" > @@ -125,11 +126,19 @@ > > int TST_TOTAL = sizeof(tdat) / sizeof(tdat[0]); > > +void > +timeout(int sig) > +{ > + tst_resm(TFAIL, "syslog() timeout after 1s" > + " for %s (test broken?)", tdat[testno].desc); > +} > + > int > main(int argc, char **argv) > { > int lc; /* loop counter */ > char *msg; /* message returned from parse_opts */ > + struct sigaction sa; > > /* parse standard options */ > if ((msg = parse_opts(argc, argv, (option_t *)NULL, NULL)) != > @@ -139,6 +148,11 @@ > > setup(); > > + memset(&sa, 0, sizeof(struct sigaction)); > + sa.sa_handler = timeout; > + sa.sa_flags = 0; > + sigaction(SIGALRM, &sa, NULL); > + > /* check looping state if -i option is given */ > for (lc = 0; TEST_LOOPING(lc); lc++) { > /* reset Tst_count in case we are looping */ > @@ -151,9 +165,13 @@ > continue; > } > > + alarm(1); > + > TEST(syslog(tdat[testno].type, tdat[testno].buf, > tdat[testno].len)); > > + alarm(0); > + > TEST_ERROR_LOG(TEST_ERRNO); > if ( (TEST_RETURN == EXP_RET_VAL) && > (TEST_ERRNO == tdat[testno].exp_errno) ) { > > > > > ------------------------------------------------------- > The SF.Net email is sponsored by EclipseCon 2004 > Premiere Conference on Open Tools Development and Integration > See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. > http://www.eclipsecon.org/osdn > _______________________________________________ > Ltp-list mailing list > Ltp...@li... > https://lists.sourceforge.net/lists/listinfo/ltp-list |
From: Andi K. <ak...@su...> - 2004-01-26 22:46:04
|
On Mon, 26 Jan 2004 16:29:48 -0600 Robert Williamson <ro...@us...> wrote: > > Thanks a lot!!! This test was also hanging for us, intermittently and it > was driving me crazy!! Applied this to our CVS tree. You'll just get a random FAIL then. How about just disabling the test case 2 in this test which is just broken like I described ? -Andi |
From: Robert W. <ro...@us...> - 2004-01-26 23:04:49
|
Andi Kleen <ak...@su...> wrote on 01/26/2004 04:45:52 PM: > On Mon, 26 Jan 2004 16:29:48 -0600 > Robert Williamson <ro...@us...> wrote: > > > > > Thanks a lot!!! This test was also hanging for us, intermittently and it > > was driving me crazy!! Applied this to our CVS tree. > > > You'll just get a random FAIL then. How about just disabling the test case 2 > in this test which is just broken like I described ? > > -Andi hmmmm....I changed the TFAIL to TWARN, so if the condition does occur, it will not log as a FAIL. This way the test can stay in, but will only record a FAIL if EFAULT is somehow not returned. -Robbie Robert V. Williamson <ro...@us...> Linux Test Project IBM Linux Technology Center Web: http://www.linuxtestproject.org IRC: #ltp on freenode.irc.net ==================== "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former." -Albert Einstein |
From: Andi K. <ak...@su...> - 2004-01-27 00:14:43
|
On Mon, 26 Jan 2004 17:04:34 -0600 Robert Williamson <ro...@us...> wrote: > > > > Andi Kleen <ak...@su...> wrote on 01/26/2004 04:45:52 PM: > > > On Mon, 26 Jan 2004 16:29:48 -0600 > > Robert Williamson <ro...@us...> wrote: > > > > > > > > Thanks a lot!!! This test was also hanging for us, intermittently and > it > > > was driving me crazy!! Applied this to our CVS tree. > > > > > > You'll just get a random FAIL then. How about just disabling the test > case 2 > > in this test which is just broken like I described ? > > > > -Andi > > hmmmm....I changed the TFAIL to TWARN, so if the condition does occur, it > will not log as a FAIL. This way the test can stay in, but will only > record a FAIL if EFAULT is somehow not returned. The test just doesn't make much sense because when the kernel buffer is empty it will never happen. The "somehow" is a totally normal condition, not worth warning for. -Andi |
From: Robert W. <ro...@us...> - 2004-01-27 15:25:58
|
Oh...okay...I'll remove that specific test from the testcase...thanks Andi! -Robbie Robert V. Williamson <ro...@us...> Linux Test Project IBM Linux Technology Center Web: http://www.linuxtestproject.org IRC: #ltp on freenode.irc.net ==================== "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former." -Albert Einstein Andi Kleen <ak...@su...> wrote on 01/26/2004 06:11:36 PM: > On Mon, 26 Jan 2004 17:04:34 -0600 > Robert Williamson <ro...@us...> wrote: > > > > > > > > > Andi Kleen <ak...@su...> wrote on 01/26/2004 04:45:52 PM: > > > > > On Mon, 26 Jan 2004 16:29:48 -0600 > > > Robert Williamson <ro...@us...> wrote: > > > > > > > > > > > Thanks a lot!!! This test was also hanging for us, intermittently and > > it > > > > was driving me crazy!! Applied this to our CVS tree. > > > > > > > > > You'll just get a random FAIL then. How about just disabling the test > > case 2 > > > in this test which is just broken like I described ? > > > > > > -Andi > > > > hmmmm....I changed the TFAIL to TWARN, so if the condition does occur, it > > will not log as a FAIL. This way the test can stay in, but will only > > record a FAIL if EFAULT is somehow not returned. > > The test just doesn't make much sense because when the kernel buffer > is empty it will never happen. The "somehow" is a totally normal > condition, not worth warning for. > > > -Andi |
From: Andi K. <ak...@su...> - 2004-01-27 15:38:34
|
On Tue, 27 Jan 2004 09:25:45 -0600 Robert Williamson <ro...@us...> wrote: > > Oh...okay...I'll remove that specific test from the testcase...thanks Andi! Ok thanks. I would recommend to keep the timeout code I added though, because it may be useful for other tests too. -Andi |
From: Robert W. <ro...@us...> - 2004-01-27 15:43:55
|
Andi Kleen <ak...@su...> wrote on 01/27/2004 09:38:24 AM: > On Tue, 27 Jan 2004 09:25:45 -0600 > Robert Williamson <ro...@us...> wrote: > > > > > Oh...okay...I'll remove that specific test from the testcase...thanks Andi! > > Ok thanks. I would recommend to keep the timeout code I added though, because > it may be useful for other tests too. > > -Andi > Ok...no problem. -Robbie Robert V. Williamson <ro...@us...> Linux Test Project IBM Linux Technology Center Web: http://www.linuxtestproject.org IRC: #ltp on freenode.irc.net ==================== "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former." -Albert Einstein |