On Thu, Mar 24, 2011 at 3:21 AM, tangchen <[email protected]> wrote:
> Hi,
>
> hugemmap test could fail because I didn't mount hugetlbfs by myself. And I
> need to umount it after test.
>
> In my opinion,
> firstly, mounting hugetlbfs on /tmp is not a good idea, because lots of
> programs could use /tmp for other purpose. This could cause other tests
> fail;
> secondly, mounting hugetlbfs could be done automatically.
> This patch creates a directory /huge, automatically mounts hugetlbfs on
> /huge before test starts, and umounts it when the test is over.
>
> Signed-off-by: tangchen <[email protected]>
> ---
>  runtest/hugetlb                                    |    2 +-
>  testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c |   38
> +++++++++++++++++++-
>  2 files changed, 38 insertions(+), 2 deletions(-)
>
> diff --git a/runtest/hugetlb b/runtest/hugetlb
> index 1347f32..1490bda 100644
> --- a/runtest/hugetlb
> +++ b/runtest/hugetlb
> @@ -1,4 +1,4 @@
> -hugemmap01 hugemmap01 -H/tmp
> +hugemmap01 hugemmap01 -H/huge
>  hugemmap02 hugemmap02 -H/tmp -c10
>  hugemmap03 hugemmap03 -H/tmp -I2 -c10
>  hugemmap04 hugemmap04 -H/tmp
> diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
> b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
> index a9b8a36..0ac411d 100644
> --- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
> +++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
> @@ -69,6 +69,7 @@
>  #include <sys/stat.h>
>  #include <sys/mman.h>
>  #include <sys/types.h>
> +#include <sys/mount.h>
>
>  #include "test.h"
>  #include "usctest.h"
> @@ -85,6 +86,9 @@ char *Hopt;                     /* location of hugetlbfs
> */
>  int beforetest=0;        /* Amount of free huge pages before testing */
>  int aftertest=0;        /* Amount of free huge pages after testing */
>  int hugepagesmapped=0;        /* Amount of huge pages mapped after testing
> */
> +FILE *nr_hugepages_file = NULL; /* Used for allocate enough hugepages for
> test. */
> +char *mount_point = NULL;    /* The location where we mount hugetlbfs. */
> +int mkdir_err = 0;        /* Used to judge if we need to remove the mount
> point. */
>
>  void setup();            /* Main setup function of test */
>  int getfreehugepages();        /* Reads free huge pages */
> @@ -121,6 +125,7 @@ main(int ac, char **av)
>         tst_exit();
>     }
>
> +    mount_point = (char *)malloc(sizeof(char) * 50);

Casting not required. Also, why are you assuming the mountpoint is 50
chars long?

>     setup();
>
>     for (lc = 0; TEST_LOOPING(lc); lc++) {
> @@ -195,6 +200,33 @@ setup()
>  {
>     char mypid[40];
>
> +    mount_point = strcpy(mount_point, Hopt);
> +
> +    tst_require_root(tst_exit);
> +
> +    int ret = mkdir(mount_point, 0755);
> +    mkdir_err = errno;

You don't need to capture the errno unless it fails.

> +    if (ret < 0 && mkdir_err != EEXIST) {
> +        tst_brkm(TBROK, NULL, "mkdir() Failed on %s, errno=%d : %s",
> +            mount_point, errno, strerror(errno));

'tst_brkm(TBROK|TERRNO, NULL, "mkdir failed on %s", mount_point);' is better.

> +    }
> +
> +    if (mount("none", mount_point, "hugetlbfs", 0, NULL) < 0) {
> +        tst_brkm(TBROK, NULL, "mount() Failed on %s, errno=%d : %s",
> +            mount_point, errno, strerror(errno));
> +    }

See above amount tst_brkm(TBROK|TERRNO, ...);

> +    nr_hugepages_file = fopen("/proc/sys/vm/nr_hugepages", "w+");
> +    if (nr_hugepages_file == NULL) {
> +        tst_brkm(TBROK, NULL, "fopen() Failed on /proc/sys/vm/nr_hugepages,
> "
> +            "errno=%d : %s", errno, strerror(errno));

See above about TERRNO. Also, please avoid using the stdio functions
unless you're trying to be 100% portable.

> +    }
> +    if (fprintf(nr_hugepages_file, "%d", 1024) < 0) {
> +        tst_brkm(TBROK, NULL, "fprintf() Failed on
> /proc/sys/vm/nr_hugepages, "
> +            "errno=%d : %s", errno, strerror(errno));
> +    }

See above about TERRNO.

> +    fclose(nr_hugepages_file);
> +
>     sprintf(mypid,"/%d",getpid());
>     TEMPFILE=strcat(mypid,TEMPFILE);
>     TEMPFILE=strcat(Hopt,TEMPFILE);
> @@ -275,5 +307,9 @@ cleanup()
>     TEST_CLEANUP;
>
>     unlink(TEMPFILE);
> +    umount(mount_point);
>
> -}
> \ No newline at end of file
> +    if (mkdir_err != EEXIST) {
> +        remove(mount_point);
> +    }
> +}

Thanks,
-Garrett

------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to