Sat, Sep 25, 2010 at 06:56:44AM CEST, [email protected] wrote: >On Fri, Sep 24, 2010 at 6:21 AM, Jan Tluka <[email protected]> wrote: >> Resending ... >> >> I've noticed that in some cases the hugeshmget05 testcase is not >> cleaning up properly after itself. It leaves hugepages reserved and >> does not free them. This could break further test runs. >> >> I think the problem is with signal handling. The testcase will do >> rm_shm() only if it ends up properly. In case it's being killed by >> SIGTERM signal (as seen from the testlog) the cleanup() function does >> not return shared memory. >> >> Without the patch I have to use ipcrm to remove all hugepages reserved >> and not returned. >> >> # grep -i unexpected RHEL-hugepage.run.log >> hugeshmget05 1 TBROK : Unexpected signal 15 received. >> # ipcs -m >> ------ Shared Memory Segments -------- >> key shmid owner perms bytes nattch status >> 0x7400ee08 3932160 root 600 4 0 >> 0x7400edde 4620289 root 600 4 0 >> 0x00000000 4980738 gdm 600 393216 2 dest >> 0x7400eddd 4587523 root 600 4 0 >> 0x78002a3b 64552964 root 600 209715200 0 >> 0x78002a38 64520197 root 600 209715200 0 >> # ipcrm -m 64552964 -m 64520197 >> >> With the patch the test returns hugepages back to the system even if it >> gets signal 15. >> >> Checked on RHEL5.5. >> >> Thanks, Jan >> >> >> The patch follows, >> >> >> --- ltp-full-20100831/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget05.c >> 2010-09-14 13:04:33.000000000 +0200 >> +++ >> ltp-full-20100831.new/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget05.c >> 2010-09-24 13:47:19.413177300 +0200 >> @@ -105,7 +105,6 @@ >> >> do_child(); >> >> - cleanup(); >> >> /*NOTREACHED*/ >> } else { /* parent */ >> @@ -114,11 +113,10 @@ >> tst_brkm(TBROK, cleanup, "waitpid failed"); >> } >> >> - /* if it exists, remove the shared memory resource */ >> - rm_shm(shm_id_1); >> - >> /* Remove the temporary directory */ >> tst_rmdir(); >> + >> + cleanup(); >> } >> return 0; >> } >> @@ -209,6 +207,9 @@ >> void >> cleanup(void) >> { >> + /* if it exists, remove the shared memory resource */ >> + rm_shm(shm_id_1); >> + >> /* >> * print timing stats if that option was specified. >> * print errno log if that option was specified. > >Hi Jan, > I spotted some other potential issues with the test. Please try >this patch and let me know whether or not it works for you . >Cheers, >-Garrett
Hi Garrett, I ran the hugeshmget05 test with your patch applied and
it works fine. Did 100 loops with no issues observed.
Thanks.
>diff --git a/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget05.c
>b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget05.c
>index bc4bd2c..3e9e26a 100644
>--- a/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget05.c
>+++ b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget05.c
>@@ -77,7 +77,8 @@ char *ltp_user = "nobody";
> int main(int ac, char **av)
> {
> char *msg; /* message returned from parse_opts */
>- int pid;
>+ pid_t pid;
>+ int status;
> void do_child(void);
>
> /* parse standard options */
>@@ -105,21 +106,22 @@ int main(int ac, char **av)
>
> do_child();
>
>- cleanup();
>-
>+ tst_exit();
> /*NOTREACHED*/
> } else { /* parent */
> /* wait for the child to return */
>- if (waitpid(pid, NULL, 0) == -1) {
>- tst_brkm(TBROK, cleanup, "waitpid failed");
>+ if (waitpid(pid, &status, 0) == -1) {
>+ tst_resm(TBROK, "waitpid failed");
>+ }
>+ else if (status != 0) {
>+ tst_resm(TFAIL, "child process failed to exit cleanly "
>+ "(exit status = %d)", status);
> }
>+ }
>
>- /* if it exists, remove the shared memory resource */
>- rm_shm(shm_id_1);
>+ cleanup();
>
>- /* Remove the temporary directory */
>- tst_rmdir();
>- }
>+ /* NOTREACHED */
> return 0;
> }
>
>@@ -152,13 +154,11 @@ do_child()
>
> switch(TEST_ERRNO) {
> case EACCES:
>- tst_resm(TPASS, "expected failure - errno = "
>- "%d : %s", TEST_ERRNO, strerror(TEST_ERRNO));
>+ tst_resm(TPASS|TTERRNO, "expected failure");
> break;
> default:
>- tst_resm(TFAIL, "call failed with an "
>- "unexpected error - %d : %s",
>- TEST_ERRNO, strerror(TEST_ERRNO));
>+ tst_resm(TFAIL|TTERRNO, "call failed with an "
>+ "unexpected error");
> break;
> }
> }
>@@ -209,6 +209,9 @@ setup(void)
> void
> cleanup(void)
> {
>+ /* if it exists, remove the shared memory resource */
>+ rm_shm(shm_id_1);
>+
> /*
> * print timing stats if that option was specified.
> * print errno log if that option was specified.
pgpR1mC1Ymk97.pgp
Description: PGP signature
------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
