This patch fixes return value always being 0 in parent even if test
fails. Using exit(value) instead of tst_XXX.

Signed-off-by: Caspar Zhang <[email protected]>
---
 testcases/kernel/mem/vma/vma01.c |   39 ++++++++++++++++++++++++++++---------
 1 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/testcases/kernel/mem/vma/vma01.c b/testcases/kernel/mem/vma/vma01.c
index 86e1276..fb121f2 100644
--- a/testcases/kernel/mem/vma/vma01.c
+++ b/testcases/kernel/mem/vma/vma01.c
@@ -60,6 +60,7 @@ int TST_TOTAL = 1;
 
 static void check_vma(void);
 static void *get_end_addr(void *addr_s, char *mapfile);
+static void check_status(int status);
 static void setup(void);
 static void cleanup(void);
 
@@ -110,26 +111,30 @@ static void check_vma(void)
 		memset(t, 2, ps);
 		u = mmap(t + 3*ps, 3*ps, PROT_WRITE,
 			    MAP_ANONYMOUS|MAP_PRIVATE, 0, 0);
-		if (u == MAP_FAILED)
-			tst_brkm(TBROK|TERRNO, NULL, "mmap");
-		tst_resm(TINFO, "u = %p", u);
+		if (u == MAP_FAILED) {
+			perror("mmap failed.\n");
+			exit(255);
+		}
+		printf("u = %p\n", u);
 		memset(u, 2, 4096);
+
 		x = get_end_addr(u, MAPS_FILE);
 		if (x == u + 6*ps)
-			tst_resm(TFAIL, "A single 6*ps VMA found.");
-		else if (x == u + 3*ps) {
+			exit(1);
+		if (x == u + 3*ps) {
 			y = get_end_addr(x, MAPS_FILE);
 			if (y == x + 3*ps)
-				tst_resm(TPASS, "two 3*ps VMAs found.");
-		} else
-			tst_brkm(TBROK, cleanup, "unexpected VMA found.");
-		exit(0);
+				exit(0);
+		}
+		exit(255);
 	default:
 		if (waitpid(-1, &status, 0) == -1)
 			tst_brkm(TBROK|TERRNO, cleanup, "waitpid");
+		if (!WIFEXITED(status))
+			tst_brkm(TBROK, cleanup, "child exited abnormally.");
+		check_status(WEXITSTATUS(status));
 		break;
 	}
-
 }
 
 static void *get_end_addr(void *addr_s, char *mapfile)
@@ -154,6 +159,20 @@ static void *get_end_addr(void *addr_s, char *mapfile)
 	tst_brkm(TBROK, cleanup, "no matched s = %p found.", addr_s);
 }
 
+static void check_status(int status)
+{
+	switch (status) {
+	case 0:
+		tst_resm(TPASS, "two 3*ps VMAs found.");
+		break;
+	case 1:
+		tst_resm(TFAIL, "A single 6*ps VMA found.");
+		break;
+	default:
+		tst_brkm(TBROK, cleanup, "unexpected VMA found.");
+	}
+}
+
 static void setup(void)
 {
 	tst_sig(FORK, DEF_HANDLER, cleanup);
------------------------------------------------------------------------------
EMC VNX: the world's simplest storage, starting under $10K
The only unified storage solution that offers unified management 
Up to 160% more powerful than alternatives and 25% more efficient. 
Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to