If shm_size bigger than shmmax, shmget() will fail with EINTVAL. So, limit the value of shm_size.
Below is the test result: [root@gaowanlong hugeshmget]# ./hugeshmget02 hugeshmget02 0 TINFO : set nr_hugepages to 128 hugeshmget02 1 TBROK : shmget #setup: errno=EINVAL(22): Invalid argument hugeshmget02 2 TBROK : Remaining cases broken hugeshmget02 0 TINFO : set nr_hugepages to 0 [root@gaowanlong hugeshmget]# cat /proc/sys/kernel/shmmax 33554432 After patched, [root@gaowanlong hugeshmget]# ./hugeshmget02 hugeshmget02 0 TINFO : set nr_hugepages to 128 hugeshmget02 1 TPASS : shmget failed as expected: TEST_ERRNO=EINVAL(22): Invalid argument hugeshmget02 2 TPASS : shmget failed as expected: TEST_ERRNO=EINVAL(22): Invalid argument hugeshmget02 3 TPASS : shmget failed as expected: TEST_ERRNO=EEXIST(17): File exists hugeshmget02 4 TPASS : shmget failed as expected: TEST_ERRNO=ENOENT(2): No such file or directory hugeshmget02 0 TINFO : set nr_hugepages to 0 [root@gaowanlong hugeshmget]# cat /proc/sys/kernel/shmall 2097152 [root@gaowanlong hugeshmget]# cat /proc/sys/kernel/shmmax 33554432 Signed-off-by: Wanlong Gao <gaowanl...@cn.fujitsu.com> --- testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget02.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget02.c b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget02.c index 1ec786f..a971608 100644 --- a/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget02.c +++ b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget02.c @@ -58,6 +58,8 @@ char *TCID = "hugeshmget02"; int TST_TOTAL = 4; +#define PATH_SHMMAX "/proc/sys/kernel/shmmax" + static size_t shm_size; static int shm_id_1 = -1; static int shm_id_2 = -1; @@ -126,6 +128,8 @@ int main(int ac, char **av) void setup(void) { long hpage_size; + char buf[BUFSIZ]; + long shmmax; tst_require_root(NULL); tst_sig(NOFORK, DEF_HANDLER, cleanup); @@ -136,6 +140,10 @@ void setup(void) hpage_size = read_meminfo("Hugepagesize:") * 1024; shm_size = hpage_size * hugepages / 2; + read_file(PATH_SHMMAX, buf); + shmmax = SAFE_STRTOL(cleanup, buf, 0, LONG_MAX); + if (shm_size > shmmax) + shm_size = shmmax; shmkey = getipckey(); shmkey2 = shmkey + 1; shm_id_1 = shmget(shmkey, shm_size, IPC_CREAT|IPC_EXCL|SHM_RW); -- 1.7.10.rc1 ------------------------------------------------------------------------------ This SF email is sponsosred by: Try Windows Azure free for 90 days Click Here http://p.sf.net/sfu/sfd2d-msazure _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list