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