On Wed, Apr 6, 2011 at 11:47 PM, Garrett Cooper <[email protected]> wrote:
> 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, ...);
*about
>> + 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