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