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