hugeshmget03 often returns ENOMEM, so that causes test fails. This patch
fixes the problem by making the following changes:

1) reduce shm_size to minimum (1 hugepage);
2) reduce shmmni to 1/2 * nr_hugepages.

so that when all shmids taken, memory allocated ~=

    1/2 * nr_hugepages * hugepagesize < free memory

Which means there will be no ENOMEM occurs, but ENOSPC as expected.

Signed-off-by: Caspar Zhang <[email protected]>
---
 .../kernel/mem/hugetlb/hugeshmget/hugeshmget03.c   |   14 ++++++++++++--
 1 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget03.c b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget03.c
index 57e80e3..a714032 100644
--- a/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget03.c
+++ b/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget03.c
@@ -64,6 +64,7 @@ int TST_TOTAL = 1;
  * depending on the system being tested.
  */
 #define MAXIDS	8192
+#define PATH_SHMMNI	"/proc/sys/kernel/shmmni"
 
 static size_t shm_size;
 static int shm_id_1 = -1;
@@ -71,6 +72,7 @@ static int num_shms;
 static int shm_id_arr[MAXIDS];
 
 static long hugepages = 128;
+static long orig_shmmni;
 static option_t options[] = {
 	{ "s:",	&sflag,	&nr_opt	},
 	{ NULL,	NULL,	NULL	}
@@ -111,6 +113,7 @@ int main(int ac, char **av)
 void setup(void)
 {
 	long hpage_size;
+	char buf[BUFSIZ];
 
 	tst_require_root(NULL);
 	tst_sig(NOFORK, DEF_HANDLER, cleanup);
@@ -120,8 +123,12 @@ void setup(void)
 	set_sys_tune("nr_hugepages", hugepages, 1);
 	hpage_size = read_meminfo("Hugepagesize:") * 1024;
 
-	shm_size = hpage_size * hugepages / 2;
-	shmkey = getipckey();
+	shm_size = hpage_size;
+
+	read_file(PATH_SHMMNI, buf);
+	orig_shmmni = SAFE_STRTOL(cleanup, buf, 0, LONG_MAX);
+	snprintf(buf, BUFSIZ, "%ld", hugepages / 2);
+	write_file(PATH_SHMMNI, buf);
 
 	/*
 	 * Use a while loop to create the maximum number of memory segments.
@@ -149,12 +156,15 @@ void setup(void)
 void cleanup(void)
 {
 	int i;
+	char buf[BUFSIZ];
 
 	TEST_CLEANUP;
 
 	for (i = 0; i < num_shms; i++)
 		rm_shm(shm_id_arr[i]);
 
+	snprintf(buf, BUFSIZ, "%ld", orig_shmmni);
+	write_file(PATH_SHMMNI, buf);
 	set_sys_tune("nr_hugepages", orig_hugepages, 0);
 
 	tst_rmdir();
------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to