From patchwork Mon Sep 26 18:26:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Liaw X-Patchwork-Id: 1682797 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it (client-ip=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20210112 header.b=UiWxJIdt; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MbrnZ38Nfz1ypX for ; Tue, 27 Sep 2022 04:26:58 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 433A43CAE04 for ; Mon, 26 Sep 2022 20:26:56 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-2.smtp.seeweb.it (in-2.smtp.seeweb.it [IPv6:2001:4b78:1:20::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by picard.linux.it (Postfix) with ESMTPS id E872F3CADE6 for ; Mon, 26 Sep 2022 20:26:42 +0200 (CEST) Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by in-2.smtp.seeweb.it (Postfix) with ESMTPS id 5FB39600693 for ; Mon, 26 Sep 2022 20:26:41 +0200 (CEST) Received: by mail-pj1-x1049.google.com with SMTP id g15-20020a17090a708f00b00203a68c9acaso3366092pjk.8 for ; Mon, 26 Sep 2022 11:26:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date; bh=vSQcjeFyeDnowuIiYw5DNRoFYGg20ViWaFFm3vMrlq0=; b=UiWxJIdt8yAOIxD3Qme4Xu2xcyzFR/PfdyfmdWVLoXLiNKvliIsimCT1Q3+lL13XYf 1vVSrjDAhnM1XmTB0/4vmBvKlgKoaZo6A+NUrygob0AP4nEnqKWS2HCjBfyPQJ3kaoWr VKDEKFhpJ7xtbBXQV5gboOWhLHxJww6IcCUs7oGT9eiSxveGUv1AXx5o8LpwKfRoeX7L pnjcoLSlOWb/1vRQGcdis2Jr15PcZsoGSMRaURNaVfSZMajnLF75jkUCY2xTdbCPTii/ 9cGCPAR+65EjlUamIlxCxCmM91VXIgrjFlo98YITK0g8qyjDRKpEEbXwxVu64aRxvIgw DXpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date; bh=vSQcjeFyeDnowuIiYw5DNRoFYGg20ViWaFFm3vMrlq0=; b=pRdJKeu0WsoovQvKGIKM7S/FiQUngNUdt/COTe59XgeavUe7IJsr6EZfuaT9yB8HCE HVRK/bvc9FNtX/ExGxA4H6Ga3Pi7KKN1GsfBVaMErxfQTWJIbNz0vGpM7wpLThpnl3uL sPk9M/5bvPRgfB0p05Y4ofJjYvv30McDNqsjmApVwhEIZ4i9zgK5RUFiEwjhNJrpVip1 dmw/uAYxTbtonxBehYHleKtnvuRwoEojYWBJbQ9K905VOomxZyt0oSZYETlhfc5iGdmN 2hFD0DiwKhRQdaNKJ3ZlCZkmxX0mU1IYnR6NXpYJPyShJrnT/esvzvSvtdAoBlBQ4Y4m tgkA== X-Gm-Message-State: ACrzQf1Fz4OjkMqZtAJ2VZXoozPJ0Bu31FhpIsotM7w0bn3JFbZ7MHvH GWkgbVuH1v0Rrt2BlFoHF+bvWKKDhxDNt6VrfVjzqUYO/R/R++J6HvLdn0ZLp34IFPimwiUQFRy gM1VW+CJG2pCUIUWAidCsAb1xR4ecNpBhBHgIvMo8CtKUTuWpzj/GtN27 X-Google-Smtp-Source: AMsMyM45AUUNMsoFXFcug/OFmnRvCGMh+adl82FB0U17hd0qF/Rrsystwu+h2OgTvU0b2JCCPkndnU377Ro= X-Received: from edliaw.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:305d]) (user=edliaw job=sendgmr) by 2002:a05:6a00:234a:b0:542:f9f2:72e5 with SMTP id j10-20020a056a00234a00b00542f9f272e5mr24811556pfj.34.1664216799705; Mon, 26 Sep 2022 11:26:39 -0700 (PDT) Date: Mon, 26 Sep 2022 18:26:22 +0000 In-Reply-To: <20220926182625.103275-1-edliaw@google.com> Mime-Version: 1.0 References: <20220926182625.103275-1-edliaw@google.com> X-Mailer: git-send-email 2.37.3.998.g577e59143f-goog Message-ID: <20220926182625.103275-2-edliaw@google.com> To: ltp@lists.linux.it X-Virus-Scanned: clamav-milter 0.102.4 at in-2.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-7.4 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on in-2.smtp.seeweb.it Subject: [LTP] [PATCH v1 1/4] mmapstress01: refactor to tst_test framework X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Edward Liaw via ltp From: Edward Liaw Reply-To: Edward Liaw Cc: kernel-team@android.com Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Signed-off-by: Edward Liaw --- .../kernel/mem/mmapstress/mmapstress01.c | 461 +++++++----------- 1 file changed, 175 insertions(+), 286 deletions(-) diff --git a/testcases/kernel/mem/mmapstress/mmapstress01.c b/testcases/kernel/mem/mmapstress/mmapstress01.c index f425c223d..23e4f5bc8 100644 --- a/testcases/kernel/mem/mmapstress/mmapstress01.c +++ b/testcases/kernel/mem/mmapstress/mmapstress01.c @@ -20,32 +20,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#define _GNU_SOURCE 1 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -/***** LTP Port *****/ -#include "test.h" -#define FAILED 0 -#define PASSED 1 - -int local_flag = PASSED; -char *TCID = "mmapstress01"; //tmnoextend -FILE *temp; -int TST_TOTAL = 1; - -int anyfail(); -void ok_exit(); -/***** ** ** *****/ - /* * This test stresses mmaps, without dealing with fragments or anything! * It forks a specified number of children, @@ -77,8 +51,8 @@ void ok_exit(); * filesize. Useful for testing large files. * (default is 0). * -r - randomize number of pages map children check. - * (random % MAXLOOPS). If not specified, each - * child checks MAXLOOPS pages. + * (random % MAXLOOPS). 0 will run forever until SIGINT + * is received. * -o - randomize offset of file to map. (default is 0) * -m - do random msync/fsyncs as well * -l - if set, the output file is not removed on @@ -88,8 +62,24 @@ void ok_exit(); * Compile with -DLARGE_FILE to enable file sizes > 2 GB. */ +#define _GNU_SOURCE 1 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define TST_NO_DEFAULT_MAIN +#include "tst_test.h" + #define MAXLOOPS 500 /* max pages for map children to write */ #define FILESIZE 4096 /* initial filesize set up by parent */ +#define TEST_FILE "mmapstress01.out" #ifdef roundup #undef roundup @@ -100,36 +90,42 @@ extern time_t time(time_t *); extern char *ctime(const time_t *); extern void *malloc(size_t); extern long lrand48(void); -extern void srand(unsigned); +extern void srand(unsigned int); extern void srand48(long); extern int rand(void); extern int atoi(const char *); -char *usage = +static char *usage = "-p nprocs [-t minutes -f filesize -S sparseoffset -r -o -m -l -d]"; -typedef unsigned char uchar_t; -#define SIZE_MAX UINT_MAX +static unsigned int initrand(void); +static void finish(int sig); +static void child_mapper(char *file, unsigned int procno, unsigned int nprocs); +static int fileokay(char *file, unsigned char *expbuf); +static int finished = 0; +static int leavefile = 0; + +static float alarmtime = 0; +static unsigned int nprocs = 0; -unsigned int initrand(void); -void finish(int sig); -void child_mapper(char *file, unsigned procno, unsigned nprocs); -int fileokay(char *file, uchar_t * expbuf); -int finished = 0; -int leavefile = 0; +static pid_t *pidarray = NULL; +static int wait_stat; +static int check_for_sanity; +static unsigned char *buf = NULL; -int debug = 0; + +static int debug = 0; #ifdef LARGE_FILE -off64_t filesize = FILESIZE; -off64_t sparseoffset = 0; +static off64_t filesize = FILESIZE; +static off64_t sparseoffset = 0; #else /* LARGE_FILE */ -off_t filesize = FILESIZE; -off_t sparseoffset = 0; +static off_t filesize = FILESIZE; +static off_t sparseoffset = 0; #endif /* LARGE_FILE */ -unsigned randloops = 0; -unsigned dosync = 0; -unsigned do_offset = 0; -unsigned pattern = 0; +static unsigned int randloops = 0; +static unsigned int dosync = 0; +static unsigned int do_offset = 0; +static unsigned int pattern = 0; int main(int argc, char *argv[]) { @@ -137,32 +133,23 @@ int main(int argc, char *argv[]) int fd; int c; extern char *optarg; - unsigned nprocs = 0; - unsigned procno; - pid_t *pidarray = NULL; + unsigned int procno; pid_t pid; - uchar_t *buf = NULL; unsigned int seed; int pagesize = sysconf(_SC_PAGE_SIZE); - float alarmtime = 0; struct sigaction sa; - unsigned i; + unsigned int i; int write_cnt; - uchar_t data; - int no_prob = 0; - int wait_stat; - time_t t; + unsigned char data; #ifdef LARGE_FILE off64_t bytes_left; #else /* LARGE_FILE */ off_t bytes_left; #endif /* LARGE_FILE */ - const char *filename = "mmapstress01.out"; progname = *argv; - tst_tmpdir(); if (argc < 2) { - tst_brkm(TBROK, NULL, "usage: %s %s", progname, usage); + tst_brk(TBROK, "usage: %s %s", progname, usage); } while ((c = getopt(argc, argv, "S:omdlrf:p:t:")) != -1) { @@ -185,11 +172,8 @@ int main(int argc, char *argv[]) #else /* LARGE_FILE */ filesize = atoi(optarg); #endif /* LARGE_FILE */ - if (filesize < 0) { - (void)fprintf(stderr, "error: negative " - "filesize\n"); - anyfail(); - } + if (filesize < 0) + tst_brk(TBROK, "error: negative filesize"); break; case 'r': randloops = 1; @@ -206,46 +190,38 @@ int main(int argc, char *argv[]) #else /* LARGE_FILE */ sparseoffset = atoi(optarg); #endif /* LARGE_FILE */ - if (sparseoffset % pagesize != 0) { - fprintf(stderr, - "sparseoffset must be pagesize multiple\n"); - anyfail(); - } + if (sparseoffset % pagesize != 0) + tst_brk(TBROK, "sparseoffset must be pagesize multiple"); break; default: - (void)fprintf(stderr, "usage: %s %s\n", progname, - usage); - tst_exit(); + tst_brk(TBROK, "usage: %s %s", progname, usage); } } /* nprocs is >= 0 since it's unsigned */ - if (nprocs > 255) { - (void)fprintf(stderr, "invalid nprocs %d - (range 0-255)\n", - nprocs); - anyfail(); - } - - (void)time(&t); + if (nprocs > 255) + tst_brk(TBROK, "invalid nprocs %d - (range 0-255)", nprocs); seed = initrand(); pattern = seed & 0xff; if (debug) { #ifdef LARGE_FILE - (void)printf("creating file <%s> with %Ld bytes, pattern %d\n", - filename, filesize, pattern); + tst_res(TINFO, "creating file <%s> with %Ld bytes, pattern %d", + TEST_FILE, filesize, pattern); #else /* LARGE_FILE */ - (void)printf("creating file <%s> with %ld bytes, pattern %d\n", - filename, filesize, pattern); + tst_res(TINFO, "creating file <%s> with %ld bytes, pattern %d", + TEST_FILE, filesize, pattern); #endif /* LARGE_FILE */ if (alarmtime) - (void)printf("running for %f minutes\n", + tst_res(TINFO, "running for %f minutes", alarmtime / 60); else - (void)printf("running with no time limit\n"); + tst_res(TINFO, "running with no time limit"); } + tst_reinit(); + /* * Plan for death by signal. User may have specified * a time limit, in which set an alarm and catch SIGALRM. @@ -253,44 +229,32 @@ int main(int argc, char *argv[]) */ sa.sa_handler = finish; sa.sa_flags = 0; - if (sigemptyset(&sa.sa_mask)) { - perror("sigemptyset error"); - goto cleanup; - } + if (sigemptyset(&sa.sa_mask)) + tst_brk(TFAIL, "sigemptyset error"); - if (sigaction(SIGINT, &sa, 0) == -1) { - perror("sigaction error SIGINT"); - goto cleanup; - } - if (sigaction(SIGQUIT, &sa, 0) == -1) { - perror("sigaction error SIGQUIT"); - goto cleanup; - } - if (sigaction(SIGTERM, &sa, 0) == -1) { - perror("sigaction error SIGTERM"); - goto cleanup; - } + if (sigaction(SIGINT, &sa, 0) == -1) + tst_brk(TFAIL, "sigaction error SIGINT"); + if (sigaction(SIGQUIT, &sa, 0) == -1) + tst_brk(TFAIL, "sigaction error SIGQUIT"); + if (sigaction(SIGTERM, &sa, 0) == -1) + tst_brk(TFAIL, "sigaction error SIGTERM"); if (alarmtime) { - if (sigaction(SIGALRM, &sa, 0) == -1) { - perror("sigaction error"); - goto cleanup; - } + if (sigaction(SIGALRM, &sa, 0) == -1) + tst_brk(TFAIL, "sigaction error"); (void)alarm(alarmtime); } #ifdef LARGE_FILE - if ((fd = open64(filename, O_CREAT | O_TRUNC | O_RDWR, 0664)) == -1) { + if ((fd = open64(TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, 0664)) == -1) { #else /* LARGE_FILE */ - if ((fd = open(filename, O_CREAT | O_TRUNC | O_RDWR, 0664)) == -1) { + if ((fd = open(TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, 0664)) == -1) { #endif /* LARGE_FILE */ - perror("open error"); - anyfail(); + tst_brk(TFAIL, "open error"); } if ((buf = malloc(pagesize)) == NULL || (pidarray = malloc(nprocs * sizeof(pid_t))) == NULL) { - perror("malloc error"); - anyfail(); + tst_brk(TFAIL, "malloc error"); } for (i = 0; i < nprocs; i++) @@ -302,25 +266,24 @@ int main(int argc, char *argv[]) data = 0; } #ifdef LARGE_FILE - if (lseek64(fd, sparseoffset, SEEK_SET) < 0) { + if (lseek64(fd, (off64_t)sparseoffset, SEEK_SET) < 0) { #else /* LARGE_FILE */ - if (lseek(fd, sparseoffset, SEEK_SET) < 0) { + if (lseek(fd, (off_t)sparseoffset, SEEK_SET) < 0) { #endif /* LARGE_FILE */ - perror("lseek"); - anyfail(); + tst_brk(TFAIL, "lseek"); } for (bytes_left = filesize; bytes_left; bytes_left -= c) { write_cnt = MIN(pagesize, (int)bytes_left); if ((c = write(fd, buf, write_cnt)) != write_cnt) { if (c == -1) { - perror("write error"); + tst_res(TFAIL, "write error"); } else { - (void)fprintf(stderr, "write: wrote %d of %d " - "bytes\n", c, write_cnt); + tst_res(TINFO, "write: wrote %d of %d " + "bytes", c, write_cnt); } (void)close(fd); - (void)unlink(filename); - anyfail(); + (void)unlink(TEST_FILE); + tst_brk(TFAIL, "write error"); } } @@ -333,11 +296,11 @@ int main(int argc, char *argv[]) switch (pid = fork()) { case -1: - perror("fork error"); - goto cleanup; + tst_brk(TFAIL, "fork error"); + break; case 0: - child_mapper(filename, procno, nprocs); + child_mapper(TEST_FILE, procno, nprocs); exit(0); default: @@ -355,37 +318,27 @@ int main(int argc, char *argv[]) * Block signals while processing child exit. */ - if (sighold(SIGALRM) || sighold(SIGINT)) { - perror("sighold error"); - goto cleanup; - } + if (sighold(SIGALRM) || sighold(SIGINT)) + tst_brk(TFAIL, "sighold error"); if (pid != -1) { /* * Check exit status, then refork with the * appropriate procno. */ - if (!WIFEXITED(wait_stat) - || WEXITSTATUS(wait_stat) != 0) { - (void)fprintf(stderr, "child exit with err " - "\n", wait_stat); - goto cleanup; - } + if (!WIFEXITED(wait_stat) || WEXITSTATUS(wait_stat) != 0) + tst_brk(TFAIL, "child exit with err ", wait_stat); for (i = 0; i < nprocs; i++) if (pid == pidarray[i]) break; - if (i == nprocs) { - (void)fprintf(stderr, "unknown child pid %d, " - "\n", pid, wait_stat); - goto cleanup; - } + if (i == nprocs) + tst_brk(TFAIL, "unknown child pid %d, ", pid, wait_stat); if ((pid = fork()) == -1) { - perror("fork error"); pidarray[i] = 0; - goto cleanup; + tst_brk(TFAIL, "fork error"); } else if (pid == 0) { /* child */ - child_mapper(filename, i, nprocs); + child_mapper(TEST_FILE, i, nprocs); exit(0); } else pidarray[i] = pid; @@ -395,15 +348,11 @@ int main(int argc, char *argv[]) * normal finish, else it's an unexpected * error... */ - if (errno != EINTR || !finished) { - perror("unexpected wait error"); - goto cleanup; - } - } - if (sigrelse(SIGALRM) || sigrelse(SIGINT)) { - perror("sigrelse error"); - goto cleanup; + if (errno != EINTR || !finished) + tst_brk(TFAIL, "unexpected wait error"); } + if (sigrelse(SIGALRM) || sigrelse(SIGINT)) + tst_brk(TFAIL, "sigrelse error"); } /* @@ -411,40 +360,33 @@ int main(int argc, char *argv[]) * the children and done!. */ - if (sighold(SIGALRM)) { - perror("sighold error"); - goto cleanup; - } + if (sighold(SIGALRM)) + tst_brk(TFAIL, "sighold error"); (void)alarm(0); - no_prob = 1; + check_for_sanity = 1; + tst_res(TPASS, "finished, cleaning up"); +} -cleanup: - for (i = 0; i < nprocs; i++) +static void cleanup(void) +{ + for (int i = 0; i < nprocs; i++) (void)kill(pidarray[i], SIGKILL); while (wait(&wait_stat) != -1 || errno != ECHILD) continue; - if (no_prob) { /* only check file if no errors */ - if (!fileokay(filename, buf)) { - (void)fprintf(stderr, "file data incorrect!\n"); - (void)printf(" leaving file <%s>\n", filename); - /***** LTP Port *****/ - local_flag = FAILED; - anyfail(); - /***** ** *****/ + if (check_for_sanity) { /* only check file if no errors */ + if (!fileokay(TEST_FILE, buf)) { + tst_res(TINFO, " leaving file <%s>", TEST_FILE); + tst_brk(TFAIL, "file data incorrect"); } else { - (void)printf("file data okay\n"); + tst_res(TINFO, "file data okay"); if (!leavefile) - (void)unlink(filename); + (void)unlink(TEST_FILE); + tst_res(TPASS, "test passed"); } } else - (void)printf(" leaving file <%s>\n", filename); - - (void)time(&t); - //(void)printf("%s: Finished %s", argv[0], ctime(&t)); LTP Port - ok_exit(); - tst_exit(); + tst_res(TINFO, " leaving file <%s>", TEST_FILE); } /* @@ -454,7 +396,7 @@ cleanup: * determined based on nprocs & procno). After a specific number of * iterations, it exits. */ -void child_mapper(char *file, unsigned procno, unsigned nprocs) +void child_mapper(char *file, unsigned int procno, unsigned int nprocs) { #ifdef LARGE_FILE struct stat64 statbuf; @@ -470,38 +412,32 @@ void child_mapper(char *file, unsigned procno, unsigned nprocs) char *maddr = NULL, *paddr; int fd; size_t pagesize = sysconf(_SC_PAGE_SIZE); - unsigned randpage; + unsigned int randpage; unsigned int seed; - unsigned loopcnt; - unsigned nloops; - unsigned mappages; - unsigned i; + unsigned int loopcnt; + unsigned int nloops; + unsigned int mappages; + unsigned int i; seed = initrand(); /* initialize random seed */ #ifdef LARGE_FILE - if (stat64(file, &statbuf) == -1) { + if (stat64(file, &statbuf) == -1) #else /* LARGE_FILE */ - if (stat(file, &statbuf) == -1) { + if (stat(file, &statbuf) == -1) #endif /* LARGE_FILE */ - perror("stat error"); - anyfail(); - } + tst_brk(TFAIL, "stat error"); filesize = statbuf.st_size; #ifdef LARGE_FILE - if ((fd = open64(file, O_RDWR)) == -1) { + if ((fd = open64(file, O_RDWR)) == -1) #else /* LARGE_FILE */ - if ((fd = open(file, O_RDWR)) == -1) { + if ((fd = open(file, O_RDWR)) == -1) #endif /* LARGE_FILE */ - perror("open error"); - anyfail(); - } + tst_brk(TFAIL, "open error"); - if (statbuf.st_size - sparseoffset > SIZE_MAX) { - fprintf(stderr, "size_t overflow when setting up map\n"); - anyfail(); - } + if (statbuf.st_size - sparseoffset > UINT_MAX) + tst_brk(TFAIL, "size_t overflow when setting up map"); mapsize = (size_t) (statbuf.st_size - sparseoffset); mappages = roundup(mapsize, pagesize) / pagesize; offset = sparseoffset; @@ -514,29 +450,19 @@ void child_mapper(char *file, unsigned procno, unsigned nprocs) } nloops = (randloops) ? (lrand48() % MAXLOOPS) : MAXLOOPS; - if (debug) { -#ifdef LARGE_FILE - (void)printf("child %d (pid %ld): seed %d, fsize %Ld, " - "mapsize %d, off %Ld, loop %d\n", - procno, getpid(), seed, filesize, mapsize, - offset / pagesize, nloops); -#else /* LARGE_FILE */ - (void)printf("child %d (pid %d): seed %d, fsize %ld, " - "mapsize %ld, off %ld, loop %d\n", + if (debug) + tst_res(TINFO, "child %d (pid %d): seed %d, fsize %lld, " + "mapsize %ld, off %lld, loop %d", procno, getpid(), seed, filesize, (long)mapsize, offset / pagesize, nloops); -#endif /* LARGE_FILE */ - } #ifdef LARGE_FILE if ((maddr = mmap64(0, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED, - fd, offset)) == (caddr_t) - 1) { + fd, (off64_t)offset)) == (caddr_t) - 1) #else /* LARGE_FILE */ if ((maddr = mmap(0, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED, - fd, offset)) == (caddr_t) - 1) { + fd, (off_t)offset)) == (caddr_t) - 1) #endif /* LARGE_FILE */ - perror("mmap error"); - anyfail(); - } + tst_brk(TFAIL, "mmap error"); (void)close(fd); @@ -554,15 +480,11 @@ void child_mapper(char *file, unsigned procno, unsigned nprocs) for (i = procno; i < validsize; i += nprocs) { if (*((unsigned char *)(paddr + i)) - != ((procno + pattern) & 0xff)) { - (void)fprintf(stderr, "child %d: invalid data " - "", procno, - *((unsigned char *)(paddr + i))); - (void)fprintf(stderr, " at pg %d off %d, exp " - "\n", randpage, i, + != ((procno + pattern) & 0xff)) + tst_brk(TFAIL, "child %d: invalid data \n" + " at pg %d off %d, exp ", procno, + *((unsigned char *)(paddr + i)), randpage, i, (procno + pattern) & 0xff); - anyfail(); - } /* * Now write it. @@ -577,22 +499,18 @@ void child_mapper(char *file, unsigned procno, unsigned nprocs) randpage = lrand48() % mappages; paddr = maddr + (randpage * pagesize); /* page address */ if (msync(paddr, (mappages - randpage) * pagesize, - MS_SYNC) == -1) { - anyfail(); - } - } - if (munmap(maddr, mapsize) == -1) { - perror("munmap failed"); - local_flag = FAILED; - anyfail(); + MS_SYNC) == -1) + tst_brk(TFAIL, "msync failed"); } + if (munmap(maddr, mapsize) == -1) + tst_brk(TFAIL, "munmap failed"); exit(0); } /* * Make sure file has all the correct data. */ -int fileokay(char *file, uchar_t * expbuf) +int fileokay(char *file, unsigned char *expbuf) { #ifdef LARGE_FILE struct stat64 statbuf; @@ -600,50 +518,36 @@ int fileokay(char *file, uchar_t * expbuf) struct stat statbuf; #endif /* LARGE_FILE */ size_t mapsize; - unsigned mappages; - unsigned pagesize = sysconf(_SC_PAGE_SIZE); - uchar_t readbuf[pagesize]; + unsigned int mappages; + unsigned int pagesize = sysconf(_SC_PAGE_SIZE); + unsigned char readbuf[pagesize]; int fd; int cnt; - unsigned i, j; + unsigned int i, j; #ifdef LARGE_FILE - if ((fd = open64(file, O_RDONLY)) == -1) { + if ((fd = open64(file, O_RDONLY)) == -1) #else /* LARGE_FILE */ - if ((fd = open(file, O_RDONLY)) == -1) { + if ((fd = open(file, O_RDONLY)) == -1) #endif /* LARGE_FILE */ - perror("open error"); - /***** LTP Port *****/ - local_flag = FAILED; - anyfail(); - /***** ** *****/ - return 0; - } + tst_brk(TFAIL, "open error"); + #ifdef LARGE_FILE - if (fstat64(fd, &statbuf) == -1) { + if (fstat64(fd, &statbuf) == -1) #else /* LARGE_FILE */ - if (fstat(fd, &statbuf) == -1) { + if (fstat(fd, &statbuf) == -1) #endif /* LARGE_FILE */ - perror("stat error"); - /***** LTP Port *****/ - local_flag = FAILED; - anyfail(); - /***** ** *****/ - return 0; - } + tst_brk(TFAIL, "stat error"); + #ifdef LARGE_FILE - if (lseek64(fd, sparseoffset, SEEK_SET) < 0) { + if (lseek64(fd, sparseoffset, SEEK_SET) < 0) #else /* LARGE_FILE */ - if (lseek(fd, sparseoffset, SEEK_SET) < 0) { + if (lseek(fd, sparseoffset, SEEK_SET) < 0) #endif /* LARGE_FILE */ - perror("lseek"); - anyfail(); - } + tst_brk(TFAIL, "lseek"); - if (statbuf.st_size - sparseoffset > SIZE_MAX) { - fprintf(stderr, "size_t overflow when setting up map\n"); - anyfail(); - } + if (statbuf.st_size - sparseoffset > UINT_MAX) + tst_brk(TFAIL, "size_t overflow when setting up map"); mapsize = (size_t) (statbuf.st_size - sparseoffset); mappages = roundup(mapsize, pagesize) / pagesize; @@ -651,18 +555,13 @@ int fileokay(char *file, uchar_t * expbuf) for (i = 0; i < mappages; i++) { cnt = read(fd, readbuf, pagesize); if (cnt == -1) { - perror("read error"); - /***** LTP Port *****/ - local_flag = FAILED; - anyfail(); - /***** ** *****/ - return 0; - } else if (cnt != pagesize) { + tst_brk(TFAIL, "read error"); + } else if ((unsigned int)cnt != pagesize) { /* * Okay if at last page in file... */ if ((i * pagesize) + cnt != mapsize) { - (void)fprintf(stderr, "read %d of %ld bytes\n", + tst_res(TINFO, "read %d of %ld bytes", (i * pagesize) + cnt, (long)mapsize); close(fd); @@ -672,18 +571,18 @@ int fileokay(char *file, uchar_t * expbuf) /* * Compare read bytes of data. */ - for (j = 0; j < cnt; j++) { + for (j = 0; j < (unsigned int)cnt; j++) { if (expbuf[j] != readbuf[j]) { - (void)fprintf(stderr, + tst_res(TINFO, "read bad data: exp %c got %c)", expbuf[j], readbuf[j]); #ifdef LARGE_FILE - (void)fprintf(stderr, ", pg %d off %d, " - "(fsize %Ld)\n", i, j, + tst_res(TINFO, ", pg %d off %d, " + "(fsize %Ld)", i, j, statbuf.st_size); #else /* LARGE_FILE */ - (void)fprintf(stderr, ", pg %d off %d, " - "(fsize %ld)\n", i, j, + tst_res(TINFO, ", pg %d off %d, " + "(fsize %ld)", i, j, statbuf.st_size); #endif /* LARGE_FILE */ close(fd); @@ -696,7 +595,7 @@ int fileokay(char *file, uchar_t * expbuf) return 1; } - /*ARGSUSED*/ void finish(int sig) +void finish(int sig LTP_ATTRIBUTE_UNUSED) { finished++; return; @@ -722,17 +621,7 @@ unsigned int initrand(void) return (seed); } -/***** LTP Port *****/ -void ok_exit(void) -{ - tst_resm(TPASS, "Test passed"); - tst_rmdir(); - tst_exit(); -} - -int anyfail(void) -{ - tst_brkm(TFAIL, tst_rmdir, "Test failed"); -} - -/***** ** ** *****/ +static struct tst_test test = { + .needs_tmpdir = 1, + .cleanup = cleanup, +}; From patchwork Mon Sep 26 18:26:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Liaw X-Patchwork-Id: 1682798 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it (client-ip=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20210112 header.b=tbLV+Q4A; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Mbrnn3Bkhz1ypX for ; Tue, 27 Sep 2022 04:27:09 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 767153CADFF for ; Mon, 26 Sep 2022 20:27:07 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-6.smtp.seeweb.it (in-6.smtp.seeweb.it [217.194.8.6]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by picard.linux.it (Postfix) with ESMTPS id F41DD3CAE00 for ; Mon, 26 Sep 2022 20:26:44 +0200 (CEST) Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by in-6.smtp.seeweb.it (Postfix) with ESMTPS id E24561400BFD for ; Mon, 26 Sep 2022 20:26:43 +0200 (CEST) Received: by mail-pf1-x449.google.com with SMTP id be18-20020a056a001f1200b00543d4bac885so4472195pfb.13 for ; Mon, 26 Sep 2022 11:26:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date; bh=EPEBjE0Dg+WclKiHPTqvTsnLillyI7gDlBikDgui+B8=; b=tbLV+Q4A1JK6W3iaSU1wEfDFWeMWAefUqKDboQ60LJKVC5hMKR0OsumXLEaa0tBEA7 CiC3zQVpZw47ewkNIdtaVChS8w/8Ip6Tt2RFuuaGNNrBlhojXyV1k5I1svT7WwgA3xQF NeJRXwti/FcOe4qwJwmLcVPpzxXgn/DRfTJSQyHpsxoB38FUkj/CjC5QNB+7gwjWvMhG mHVB9V6KbD282ZrTswlrtChgWplzoOgol5CoLJxxvKdNkEuRoBWbEpFL0Wi1CGRHeSnH QdFXaaAMbXlqsZ2J49Zv3AW+r5DcawrmEoFmN+VnS9PaWJxtdlwvcuGqDH+o5pCO1f7v 0igQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date; bh=EPEBjE0Dg+WclKiHPTqvTsnLillyI7gDlBikDgui+B8=; b=klTjbGYC6lvwRw/Ng7vtSAsQQz74WrIeq6YFNn3W9yskM15I/zuMeClhEOMQ9+7mHz WwQyShsBBoag9ayrqnbqY3q+KWZkC1CPO9DfwnjD1l4Lf7HDLMgpAr0wa7/BueyPK336 gMSrqFHKFx/bn/hQvrBPKSlLF5uB6MjqIrSaB1D7ROoAkoHeMp/LwaFcwKpQpSHNGa3Z O8JE6GIrQQmW0FJXeI9jsQYWFY1EDL7v51QEGv7CyR5VrM0WKzBdAGzZqgwUVnPqTuwH 6p+LfFJEDVSUAExk2ahxZESlEJlbk7f6dmc1hcg2OxU3AsKn5qPWHw2l5SmIAbnjqovq kybQ== X-Gm-Message-State: ACrzQf3uXmDJZJaBoCD2x814L8mwHs1ZDLySoucKM49s1jO2TzbmXO/O NbD2/ucVif4PGaNTuyEmgxZ4pirBQx9RX7XY/kOY1DCgUbzD6b9m/ePwErWZEBRAXCZlWEG+taG PCT7kiKX/y8IkQKsBndfEL2V55pZJJ4DbOh7sKraHfChBwwET2XGitkI8 X-Google-Smtp-Source: AMsMyM6P7g90gz2jPUB1eMeL2mpCd+K+P6/Kxjhoa5iax/3C5w1Vhjqgu+gSPtkY1kjfKt350m9eRDoVt2w= X-Received: from edliaw.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:305d]) (user=edliaw job=sendgmr) by 2002:a17:90a:cd06:b0:203:ae0e:6a21 with SMTP id d6-20020a17090acd0600b00203ae0e6a21mr2119pju.0.1664216801642; Mon, 26 Sep 2022 11:26:41 -0700 (PDT) Date: Mon, 26 Sep 2022 18:26:23 +0000 In-Reply-To: <20220926182625.103275-1-edliaw@google.com> Mime-Version: 1.0 References: <20220926182625.103275-1-edliaw@google.com> X-Mailer: git-send-email 2.37.3.998.g577e59143f-goog Message-ID: <20220926182625.103275-3-edliaw@google.com> To: ltp@lists.linux.it X-Virus-Scanned: clamav-milter 0.102.4 at in-6.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-7.4 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on in-6.smtp.seeweb.it Subject: [LTP] [PATCH v1 2/4] mmapstress01: refactor options X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Edward Liaw via ltp From: Edward Liaw Reply-To: Edward Liaw Cc: kernel-team@android.com Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Signed-off-by: Edward Liaw --- .../kernel/mem/mmapstress/mmapstress01.c | 180 ++++++++---------- 1 file changed, 78 insertions(+), 102 deletions(-) diff --git a/testcases/kernel/mem/mmapstress/mmapstress01.c b/testcases/kernel/mem/mmapstress/mmapstress01.c index 23e4f5bc8..aad4ba942 100644 --- a/testcases/kernel/mem/mmapstress/mmapstress01.c +++ b/testcases/kernel/mem/mmapstress/mmapstress01.c @@ -74,7 +74,7 @@ #include #include #include -#define TST_NO_DEFAULT_MAIN +#include #include "tst_test.h" #define MAXLOOPS 500 /* max pages for map children to write */ @@ -93,52 +93,97 @@ extern long lrand48(void); extern void srand(unsigned int); extern void srand48(long); extern int rand(void); -extern int atoi(const char *); - -static char *usage = - "-p nprocs [-t minutes -f filesize -S sparseoffset -r -o -m -l -d]"; static unsigned int initrand(void); static void finish(int sig); static void child_mapper(char *file, unsigned int procno, unsigned int nprocs); static int fileokay(char *file, unsigned char *expbuf); static int finished = 0; -static int leavefile = 0; + +static char *debug; +static char *leavefile; +static char *do_sync; +static char *do_offset; +static char *randloops; +static char *opt_filesize; +static char *opt_nprocs; +static char *opt_sparseoffset; +static char *opt_alarmtime; static float alarmtime = 0; -static unsigned int nprocs = 0; +static int nprocs = 0; +static long long filesize = FILESIZE; +static long long sparseoffset = 0; +static unsigned int pattern = 0; static pid_t *pidarray = NULL; static int wait_stat; static int check_for_sanity; static unsigned char *buf = NULL; +static struct tst_option options[] = { + {"d", &debug, "Enable debug output"}, + {"l", &leavefile, "Don't remove the output file on program exit"}, + {"m", &do_sync, "Do random msync/fsyncs as well"}, + {"o", &do_offset, "Randomize the offset of file to map"}, + {"r", &randloops, "Randomize number of pages map children check (random % MAXLOOPS), otherwise each child checks MAXLOOPS pages"}, + {"f:", &opt_filesize, "Initial filesize (default 4096)"}, + {"p:", &opt_nprocs, "Number of mapping children to create (required)"}, + {"S:", &opt_sparseoffset, "When non-zero, causes the sparse area to be left before the data, so that the actual initial filesize is sparseoffset + filesize (default 0)"}, + {"t:", &opt_alarmtime, "Number of minutes to run (default 0)"}, +}; + +static void setup(void) +{ + int pagesize = sysconf(_SC_PAGE_SIZE); + + if (!opt_nprocs) + tst_brk(TBROK, "missing number of mapping children, specify with -p nprocs"); -static int debug = 0; #ifdef LARGE_FILE -static off64_t filesize = FILESIZE; -static off64_t sparseoffset = 0; -#else /* LARGE_FILE */ -static off_t filesize = FILESIZE; -static off_t sparseoffset = 0; -#endif /* LARGE_FILE */ -static unsigned int randloops = 0; -static unsigned int dosync = 0; -static unsigned int do_offset = 0; -static unsigned int pattern = 0; + if (tst_parse_filesize(opt_filesize, &filesize, 0, LONG_MAX)) +#else + if (tst_parse_filesize(opt_filesize, &filesize, 0, INT_MAX)) +#endif + tst_brk(TBROK, "invalid initial filesize '%s'", opt_filesize); + +#ifdef LARGE_FILE + if (tst_parse_filesize(opt_sparseoffset, &sparseoffset, LONG_MIN, LONG_MAX)) +#else + if (tst_parse_filesize(opt_sparseoffset, &sparseoffset, INT_MIN, INT_MAX)) +#endif + tst_brk(TBROK, "invalid sparse offset '%s'", opt_sparseoffset); + if (sparseoffset % pagesize != 0) + tst_brk(TBROK, "sparseoffset must be pagesize multiple"); + + if (tst_parse_int(opt_nprocs, &nprocs, 0, 255)) + tst_brk(TBROK, "invalid number of mapping children '%s'", opt_nprocs); -int main(int argc, char *argv[]) + if (tst_parse_float(opt_alarmtime, &alarmtime, 0, FLT_MAX / 60)) + tst_brk(TBROK, "invalid minutes to run '%s'", opt_alarmtime); + + if (debug) { + tst_res(TINFO, "creating file <%s> with %lld bytes, pattern %d", + TEST_FILE, filesize, pattern); + if (alarmtime) + tst_res(TINFO, "running for %f minutes", + alarmtime); + else + tst_res(TINFO, "running with no time limit"); + } + alarmtime *= 60; +} + +static void run(void) { - char *progname; int fd; int c; - extern char *optarg; - unsigned int procno; + int procno; pid_t pid; unsigned int seed; int pagesize = sysconf(_SC_PAGE_SIZE); struct sigaction sa; - unsigned int i; + int i; int write_cnt; unsigned char data; #ifdef LARGE_FILE @@ -147,81 +192,9 @@ int main(int argc, char *argv[]) off_t bytes_left; #endif /* LARGE_FILE */ - progname = *argv; - if (argc < 2) { - tst_brk(TBROK, "usage: %s %s", progname, usage); - } - - while ((c = getopt(argc, argv, "S:omdlrf:p:t:")) != -1) { - switch (c) { - case 'd': - debug = 1; - break; - case 't': - alarmtime = atof(optarg) * 60; - break; - case 'p': - nprocs = atoi(optarg); - break; - case 'l': - leavefile = 1; - break; - case 'f': -#ifdef LARGE_FILE - filesize = atoll(optarg); -#else /* LARGE_FILE */ - filesize = atoi(optarg); -#endif /* LARGE_FILE */ - if (filesize < 0) - tst_brk(TBROK, "error: negative filesize"); - break; - case 'r': - randloops = 1; - break; - case 'm': - dosync = 1; - break; - case 'o': - do_offset = 1; - break; - case 'S': -#ifdef LARGE_FILE - sparseoffset = atoll(optarg); -#else /* LARGE_FILE */ - sparseoffset = atoi(optarg); -#endif /* LARGE_FILE */ - if (sparseoffset % pagesize != 0) - tst_brk(TBROK, "sparseoffset must be pagesize multiple"); - break; - default: - tst_brk(TBROK, "usage: %s %s", progname, usage); - } - } - - /* nprocs is >= 0 since it's unsigned */ - if (nprocs > 255) - tst_brk(TBROK, "invalid nprocs %d - (range 0-255)", nprocs); - seed = initrand(); pattern = seed & 0xff; - if (debug) { -#ifdef LARGE_FILE - tst_res(TINFO, "creating file <%s> with %Ld bytes, pattern %d", - TEST_FILE, filesize, pattern); -#else /* LARGE_FILE */ - tst_res(TINFO, "creating file <%s> with %ld bytes, pattern %d", - TEST_FILE, filesize, pattern); -#endif /* LARGE_FILE */ - if (alarmtime) - tst_res(TINFO, "running for %f minutes", - alarmtime / 60); - else - tst_res(TINFO, "running with no time limit"); - } - - tst_reinit(); - /* * Plan for death by signal. User may have specified * a time limit, in which set an alarm and catch SIGALRM. @@ -300,7 +273,7 @@ int main(int argc, char *argv[]) break; case 0: - child_mapper(TEST_FILE, procno, nprocs); + child_mapper(TEST_FILE, (unsigned int)procno, (unsigned int)nprocs); exit(0); default: @@ -338,7 +311,7 @@ int main(int argc, char *argv[]) pidarray[i] = 0; tst_brk(TFAIL, "fork error"); } else if (pid == 0) { /* child */ - child_mapper(TEST_FILE, i, nprocs); + child_mapper(TEST_FILE, (unsigned int)i, (unsigned int)nprocs); exit(0); } else pidarray[i] = pid; @@ -453,14 +426,14 @@ void child_mapper(char *file, unsigned int procno, unsigned int nprocs) if (debug) tst_res(TINFO, "child %d (pid %d): seed %d, fsize %lld, " "mapsize %ld, off %lld, loop %d", - procno, getpid(), seed, filesize, (long)mapsize, - offset / pagesize, nloops); + procno, getpid(), seed, (long long)filesize, (long)mapsize, + (long long)offset / pagesize, nloops); #ifdef LARGE_FILE if ((maddr = mmap64(0, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED, - fd, (off64_t)offset)) == (caddr_t) - 1) + fd, offset)) == (caddr_t) - 1) #else /* LARGE_FILE */ if ((maddr = mmap(0, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED, - fd, (off_t)offset)) == (caddr_t) - 1) + fd, offset)) == (caddr_t) - 1) #endif /* LARGE_FILE */ tst_brk(TFAIL, "mmap error"); @@ -492,7 +465,7 @@ void child_mapper(char *file, unsigned int procno, unsigned int nprocs) *(paddr + i) = (procno + pattern) & 0xff; } } - if (dosync) { + if (do_sync) { /* * Exercise msync() as well! */ @@ -623,5 +596,8 @@ unsigned int initrand(void) static struct tst_test test = { .needs_tmpdir = 1, + .test_all = run, + .setup = setup, + .options = options, .cleanup = cleanup, }; From patchwork Mon Sep 26 18:26:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Liaw X-Patchwork-Id: 1682799 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20210112 header.b=HYaCIz87; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Mbrp36TgYz1yqM for ; Tue, 27 Sep 2022 04:27:23 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id AE9163CAD0F for ; Mon, 26 Sep 2022 20:27:20 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-6.smtp.seeweb.it (in-6.smtp.seeweb.it [217.194.8.6]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by picard.linux.it (Postfix) with ESMTPS id 6FFCF3CAE07 for ; Mon, 26 Sep 2022 20:26:47 +0200 (CEST) Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by in-6.smtp.seeweb.it (Postfix) with ESMTPS id A22C81400BF8 for ; Mon, 26 Sep 2022 20:26:46 +0200 (CEST) Received: by mail-pg1-x549.google.com with SMTP id l72-20020a63914b000000b00434ac6f8214so4421633pge.13 for ; Mon, 26 Sep 2022 11:26:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date; bh=T8EsmXKIjyJSRYbPx2IBPn6I+boorNp+KAXmUbsM+mg=; b=HYaCIz874UQwG+Mj/lmRc9pxNOV43CdtSEdqsz7oVDQMEUceoS5fHr7g5tyxq9Z0u3 vWC5Noanp2rydqf8ti3I5gH2GyLutaEjgVZWigWdg5l5VFXZB9ymR0t39WuwsUK0KpFl LRTDkREeVfheQhb5L9w/EnymdE4m73IaXk2nb8PMjdKac3ZWfUVftnmyYYigDN7nqMUS 0gSTjtU0787oouGQZLWGrqm5ZsXSFzC8/cD9WmJeU389AvhfiBc0/mVuqy5UT3WbUmep QXblOyekL7Ga3c6EPoYKIl8yAl95V1wI3Nh2UjONbLjAxb+5n5aNH/N8N1bYn8MCXz4o HKnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date; bh=T8EsmXKIjyJSRYbPx2IBPn6I+boorNp+KAXmUbsM+mg=; b=igT6Ryn4e21FeK6WliWE1nJmsPXcZrY8ISHx4Jx0htryzTeMVBsa6MX1+/6mI9jAP3 27w9EWpKM/kJoWWdAtXMEWOOETfMin1Lt0YlY8BULvdj0xaCIu/LDsFQhyZu4yrt5Y/V frQ0Pby6/MbW64gtltfz3BX84dbhJF6n9FGWnljC5kuDgKSOlfNpPlniT58UZZmfIUmw 4RFmZws7qR6jjwUAeZLtYFJDEhkwJi9pltDCZW1EwyjoqLb/PVDEnUY97SkUZor4xSVm poBI2XkK5rCjrgJPKXpj3IDdNkrfbl+NrVap3WJC5IczrvtdUaj//TrRqLN3Nd99s1f4 brMQ== X-Gm-Message-State: ACrzQf0Eos9ORRKaXBJM15iXXHUoytJ4RGNR+ljALRVpm25fRP/l5FIj HGKlzz7pytYHhVT2MD8M3/b8Gq4Z24F8PYRo3pL7AY8WK7rF/kWSR4VIHCbb/lE7lFrEXwErB/V hUmAteVNolwbuTEZeLJ1i5fahQu0t50gG/ZpWuZCOETFWxgfjSlHKb5OQ X-Google-Smtp-Source: AMsMyM60xAW3c9GASvX884+z1ND2C03R+sDqMFGpKPoB0sky3gC7kCyP/HVhwrMIdZjdOOaQGvCO+ooX56c= X-Received: from edliaw.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:305d]) (user=edliaw job=sendgmr) by 2002:a17:90a:cd06:b0:203:ae0e:6a21 with SMTP id d6-20020a17090acd0600b00203ae0e6a21mr2125pju.0.1664216803755; Mon, 26 Sep 2022 11:26:43 -0700 (PDT) Date: Mon, 26 Sep 2022 18:26:24 +0000 In-Reply-To: <20220926182625.103275-1-edliaw@google.com> Mime-Version: 1.0 References: <20220926182625.103275-1-edliaw@google.com> X-Mailer: git-send-email 2.37.3.998.g577e59143f-goog Message-ID: <20220926182625.103275-4-edliaw@google.com> To: ltp@lists.linux.it X-Virus-Scanned: clamav-milter 0.102.4 at in-6.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-7.4 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on in-6.smtp.seeweb.it Subject: [LTP] [PATCH v1 3/4] mmapstress01: use FILE_OFFSET_BITS=64 X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Edward Liaw via ltp From: Edward Liaw Reply-To: Edward Liaw Cc: kernel-team@android.com Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Build tests with FILE_OFFSET_BITS=64 instead of doing LARGE_FILE checks to switch between 32 and 64 bit types and syscalls. Signed-off-by: Edward Liaw --- testcases/kernel/mem/mmapstress/Makefile | 2 + .../kernel/mem/mmapstress/mmapstress01.c | 57 +------------------ 2 files changed, 4 insertions(+), 55 deletions(-) diff --git a/testcases/kernel/mem/mmapstress/Makefile b/testcases/kernel/mem/mmapstress/Makefile index 744f099d8..b30bd34b8 100644 --- a/testcases/kernel/mem/mmapstress/Makefile +++ b/testcases/kernel/mem/mmapstress/Makefile @@ -5,3 +5,5 @@ top_srcdir ?= ../../../.. include $(top_srcdir)/include/mk/testcases.mk include $(top_srcdir)/include/mk/generic_leaf_target.mk + +mmapstress01: CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE diff --git a/testcases/kernel/mem/mmapstress/mmapstress01.c b/testcases/kernel/mem/mmapstress/mmapstress01.c index aad4ba942..cb18241de 100644 --- a/testcases/kernel/mem/mmapstress/mmapstress01.c +++ b/testcases/kernel/mem/mmapstress/mmapstress01.c @@ -140,14 +140,14 @@ static void setup(void) if (!opt_nprocs) tst_brk(TBROK, "missing number of mapping children, specify with -p nprocs"); -#ifdef LARGE_FILE +#if _FILE_OFFSET_BITS == 64 if (tst_parse_filesize(opt_filesize, &filesize, 0, LONG_MAX)) #else if (tst_parse_filesize(opt_filesize, &filesize, 0, INT_MAX)) #endif tst_brk(TBROK, "invalid initial filesize '%s'", opt_filesize); -#ifdef LARGE_FILE +#if _FILE_OFFSET_BITS == 64 if (tst_parse_filesize(opt_sparseoffset, &sparseoffset, LONG_MIN, LONG_MAX)) #else if (tst_parse_filesize(opt_sparseoffset, &sparseoffset, INT_MIN, INT_MAX)) @@ -186,11 +186,7 @@ static void run(void) int i; int write_cnt; unsigned char data; -#ifdef LARGE_FILE - off64_t bytes_left; -#else /* LARGE_FILE */ off_t bytes_left; -#endif /* LARGE_FILE */ seed = initrand(); pattern = seed & 0xff; @@ -217,11 +213,7 @@ static void run(void) tst_brk(TFAIL, "sigaction error"); (void)alarm(alarmtime); } -#ifdef LARGE_FILE - if ((fd = open64(TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, 0664)) == -1) { -#else /* LARGE_FILE */ if ((fd = open(TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, 0664)) == -1) { -#endif /* LARGE_FILE */ tst_brk(TFAIL, "open error"); } @@ -238,11 +230,7 @@ static void run(void) if (++data == nprocs) data = 0; } -#ifdef LARGE_FILE - if (lseek64(fd, (off64_t)sparseoffset, SEEK_SET) < 0) { -#else /* LARGE_FILE */ if (lseek(fd, (off_t)sparseoffset, SEEK_SET) < 0) { -#endif /* LARGE_FILE */ tst_brk(TFAIL, "lseek"); } for (bytes_left = filesize; bytes_left; bytes_left -= c) { @@ -371,15 +359,9 @@ static void cleanup(void) */ void child_mapper(char *file, unsigned int procno, unsigned int nprocs) { -#ifdef LARGE_FILE - struct stat64 statbuf; - off64_t filesize; - off64_t offset; -#else /* LARGE_FILE */ struct stat statbuf; off_t filesize; off_t offset; -#endif /* LARGE_FILE */ size_t validsize; size_t mapsize; char *maddr = NULL, *paddr; @@ -394,19 +376,11 @@ void child_mapper(char *file, unsigned int procno, unsigned int nprocs) seed = initrand(); /* initialize random seed */ -#ifdef LARGE_FILE - if (stat64(file, &statbuf) == -1) -#else /* LARGE_FILE */ if (stat(file, &statbuf) == -1) -#endif /* LARGE_FILE */ tst_brk(TFAIL, "stat error"); filesize = statbuf.st_size; -#ifdef LARGE_FILE - if ((fd = open64(file, O_RDWR)) == -1) -#else /* LARGE_FILE */ if ((fd = open(file, O_RDWR)) == -1) -#endif /* LARGE_FILE */ tst_brk(TFAIL, "open error"); if (statbuf.st_size - sparseoffset > UINT_MAX) @@ -428,13 +402,8 @@ void child_mapper(char *file, unsigned int procno, unsigned int nprocs) "mapsize %ld, off %lld, loop %d", procno, getpid(), seed, (long long)filesize, (long)mapsize, (long long)offset / pagesize, nloops); -#ifdef LARGE_FILE - if ((maddr = mmap64(0, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED, - fd, offset)) == (caddr_t) - 1) -#else /* LARGE_FILE */ if ((maddr = mmap(0, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset)) == (caddr_t) - 1) -#endif /* LARGE_FILE */ tst_brk(TFAIL, "mmap error"); (void)close(fd); @@ -485,11 +454,7 @@ void child_mapper(char *file, unsigned int procno, unsigned int nprocs) */ int fileokay(char *file, unsigned char *expbuf) { -#ifdef LARGE_FILE - struct stat64 statbuf; -#else /* LARGE_FILE */ struct stat statbuf; -#endif /* LARGE_FILE */ size_t mapsize; unsigned int mappages; unsigned int pagesize = sysconf(_SC_PAGE_SIZE); @@ -498,25 +463,13 @@ int fileokay(char *file, unsigned char *expbuf) int cnt; unsigned int i, j; -#ifdef LARGE_FILE - if ((fd = open64(file, O_RDONLY)) == -1) -#else /* LARGE_FILE */ if ((fd = open(file, O_RDONLY)) == -1) -#endif /* LARGE_FILE */ tst_brk(TFAIL, "open error"); -#ifdef LARGE_FILE - if (fstat64(fd, &statbuf) == -1) -#else /* LARGE_FILE */ if (fstat(fd, &statbuf) == -1) -#endif /* LARGE_FILE */ tst_brk(TFAIL, "stat error"); -#ifdef LARGE_FILE - if (lseek64(fd, sparseoffset, SEEK_SET) < 0) -#else /* LARGE_FILE */ if (lseek(fd, sparseoffset, SEEK_SET) < 0) -#endif /* LARGE_FILE */ tst_brk(TFAIL, "lseek"); if (statbuf.st_size - sparseoffset > UINT_MAX) @@ -549,15 +502,9 @@ int fileokay(char *file, unsigned char *expbuf) tst_res(TINFO, "read bad data: exp %c got %c)", expbuf[j], readbuf[j]); -#ifdef LARGE_FILE - tst_res(TINFO, ", pg %d off %d, " - "(fsize %Ld)", i, j, - statbuf.st_size); -#else /* LARGE_FILE */ tst_res(TINFO, ", pg %d off %d, " "(fsize %ld)", i, j, statbuf.st_size); -#endif /* LARGE_FILE */ close(fd); return 0; } From patchwork Mon Sep 26 18:26:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Liaw X-Patchwork-Id: 1682800 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it (client-ip=213.254.12.146; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20210112 header.b=XjlyFRVb; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MbrpD512hz1ypX for ; Tue, 27 Sep 2022 04:27:32 +1000 (AEST) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id B76F33CADE5 for ; Mon, 26 Sep 2022 20:27:30 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-5.smtp.seeweb.it (in-5.smtp.seeweb.it [IPv6:2001:4b78:1:20::5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by picard.linux.it (Postfix) with ESMTPS id 4201E3CADFE for ; Mon, 26 Sep 2022 20:26:48 +0200 (CEST) Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by in-5.smtp.seeweb.it (Postfix) with ESMTPS id 89C6260004F for ; Mon, 26 Sep 2022 20:26:47 +0200 (CEST) Received: by mail-pg1-x549.google.com with SMTP id 128-20020a630486000000b00435b18f71b3so4412371pge.19 for ; Mon, 26 Sep 2022 11:26:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date; bh=eVu+OTHsm0UCm+0mp50CV5MOalhz7rOWx4qPpsO2mUA=; b=XjlyFRVbKWQpg85OquI1SFfxk8wT6vj4+8Od8Mwl6ag4w075DevH3UnMHBBmW7wLa+ wq5dSSClP4W3PyhfBD0R+b6ehX71P8DkCVlByDFif1D92BFMqgUwUdzm2YNWFCoDdLnS GIxMTyZgpBTS3yboaP0wLSXp7y1IEBKwrEJx6simqQqYZtx/P48tOnRD7CRd2En6lszS WTk3FetNZrm78WGMEMoms73NJUo18/MnMLE0zYS6VI1VXR4a++2NGnceVi+3d4Zbj3dh Ad/d3Z8nWeXqgXWDiHrryFC6Fvt+Maum2w9oTBkqcz7tC6m26J9ctxE7VruP7ya2/Z9a d1+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date; bh=eVu+OTHsm0UCm+0mp50CV5MOalhz7rOWx4qPpsO2mUA=; b=JYOt/2GtiT5ME0R7lAx0YOHDUKI7/pzBYqpbNW1zqCd0XJ1V0Sso2G8w9rcdwxmJl4 /5DfuKzECzwhf3AP5cxf9kKDo1xFF8fIEf8wFFXyFyW66YwRJde3N2byGe6IInVWXESC shMOBqyXJvvaS3r4p/JXrqClG+gQeQZaBZFNz18nvuLjQ1YA1PmQJKT1KM6AUzUMkUbW Yg7qCsHYzemxbAYTq3/tP/kcKQsAch74/z0to+VGSal2KNT3lvnJqhSqOB3/RyPvVQQY WMNni3ZpeVayveVU33edKjQFpNcoJv8uEqvaQ+5xYxZVjCpe6u1OlOpI3tbAtgl1FDut tBdg== X-Gm-Message-State: ACrzQf1hHfRikvIiZE1W6FFyslUK59Vay96U9ycH5d4B5VpB7G054qYN 9Z49W5QRKF5nIBqPYjy6URtriUks/e1G1iZZA8ZnQFftR1A0QfmTHTDXS/WKe8nfWP0SkLqrShD vySg948Ga97Rrs1kR6FEgkT1uwadpLbBsheat55l4cpir9jTX84eBw1sx X-Google-Smtp-Source: AMsMyM67BBWtEHvQDBQ/UIWF4DzZdFqVej/4hULLnBjO0ENmmBaHu3x1h4LydrPkzeA+rPukoHsA2FiTSno= X-Received: from edliaw.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:305d]) (user=edliaw job=sendgmr) by 2002:a17:903:244d:b0:178:a0eb:d4bc with SMTP id l13-20020a170903244d00b00178a0ebd4bcmr23514112pls.33.1664216806025; Mon, 26 Sep 2022 11:26:46 -0700 (PDT) Date: Mon, 26 Sep 2022 18:26:25 +0000 In-Reply-To: <20220926182625.103275-1-edliaw@google.com> Mime-Version: 1.0 References: <20220926182625.103275-1-edliaw@google.com> X-Mailer: git-send-email 2.37.3.998.g577e59143f-goog Message-ID: <20220926182625.103275-5-edliaw@google.com> To: ltp@lists.linux.it X-Virus-Scanned: clamav-milter 0.102.4 at in-5.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-7.4 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on in-5.smtp.seeweb.it Subject: [LTP] [PATCH v1 4/4] mmapstress01: use safe macros X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Edward Liaw via ltp From: Edward Liaw Reply-To: Edward Liaw Cc: kernel-team@android.com Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Signed-off-by: Edward Liaw --- .../kernel/mem/mmapstress/mmapstress01.c | 80 ++++++++----------- 1 file changed, 32 insertions(+), 48 deletions(-) diff --git a/testcases/kernel/mem/mmapstress/mmapstress01.c b/testcases/kernel/mem/mmapstress/mmapstress01.c index cb18241de..bb1723c42 100644 --- a/testcases/kernel/mem/mmapstress/mmapstress01.c +++ b/testcases/kernel/mem/mmapstress/mmapstress01.c @@ -187,6 +187,7 @@ static void run(void) int write_cnt; unsigned char data; off_t bytes_left; + sigset_t set_mask; seed = initrand(); pattern = seed & 0xff; @@ -198,29 +199,19 @@ static void run(void) */ sa.sa_handler = finish; sa.sa_flags = 0; - if (sigemptyset(&sa.sa_mask)) - tst_brk(TFAIL, "sigemptyset error"); - - if (sigaction(SIGINT, &sa, 0) == -1) - tst_brk(TFAIL, "sigaction error SIGINT"); - if (sigaction(SIGQUIT, &sa, 0) == -1) - tst_brk(TFAIL, "sigaction error SIGQUIT"); - if (sigaction(SIGTERM, &sa, 0) == -1) - tst_brk(TFAIL, "sigaction error SIGTERM"); + SAFE_SIGEMPTYSET(&sa.sa_mask); + SAFE_SIGACTION(SIGINT, &sa, 0); + SAFE_SIGACTION(SIGQUIT, &sa, 0); + SAFE_SIGACTION(SIGTERM, &sa, 0); if (alarmtime) { - if (sigaction(SIGALRM, &sa, 0) == -1) - tst_brk(TFAIL, "sigaction error"); + SAFE_SIGACTION(SIGALRM, &sa, 0); (void)alarm(alarmtime); } - if ((fd = open(TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, 0664)) == -1) { - tst_brk(TFAIL, "open error"); - } + fd = SAFE_OPEN(TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, 0664); - if ((buf = malloc(pagesize)) == NULL - || (pidarray = malloc(nprocs * sizeof(pid_t))) == NULL) { - tst_brk(TFAIL, "malloc error"); - } + buf = SAFE_MALLOC(pagesize); + pidarray = SAFE_MALLOC(nprocs * sizeof(pid_t)); for (i = 0; i < nprocs; i++) *(pidarray + i) = 0; @@ -230,9 +221,7 @@ static void run(void) if (++data == nprocs) data = 0; } - if (lseek(fd, (off_t)sparseoffset, SEEK_SET) < 0) { - tst_brk(TFAIL, "lseek"); - } + SAFE_LSEEK(fd, (off_t)sparseoffset, SEEK_SET); for (bytes_left = filesize; bytes_left; bytes_left -= c) { write_cnt = MIN(pagesize, (int)bytes_left); if ((c = write(fd, buf, write_cnt)) != write_cnt) { @@ -242,13 +231,13 @@ static void run(void) tst_res(TINFO, "write: wrote %d of %d " "bytes", c, write_cnt); } - (void)close(fd); - (void)unlink(TEST_FILE); + SAFE_CLOSE(fd); + SAFE_UNLINK(TEST_FILE); tst_brk(TFAIL, "write error"); } } - (void)close(fd); + SAFE_CLOSE(fd); /* * Fork off mmap children. @@ -273,14 +262,16 @@ static void run(void) * Now wait for children and refork them as needed. */ + SAFE_SIGEMPTYSET(&set_mask); + SAFE_SIGADDSET(&set_mask, SIGALRM); + SAFE_SIGADDSET(&set_mask, SIGINT); while (!finished) { pid = wait(&wait_stat); /* * Block signals while processing child exit. */ - if (sighold(SIGALRM) || sighold(SIGINT)) - tst_brk(TFAIL, "sighold error"); + SAFE_SIGPROCMASK(SIG_BLOCK, &set_mask, NULL); if (pid != -1) { /* @@ -312,8 +303,7 @@ static void run(void) if (errno != EINTR || !finished) tst_brk(TFAIL, "unexpected wait error"); } - if (sigrelse(SIGALRM) || sigrelse(SIGINT)) - tst_brk(TFAIL, "sigrelse error"); + SAFE_SIGPROCMASK(SIG_UNBLOCK, &set_mask, NULL); } /* @@ -321,8 +311,9 @@ static void run(void) * the children and done!. */ - if (sighold(SIGALRM)) - tst_brk(TFAIL, "sighold error"); + SAFE_SIGEMPTYSET(&set_mask); + SAFE_SIGADDSET(&set_mask, SIGALRM); + SAFE_SIGPROCMASK(SIG_BLOCK, &set_mask, NULL); (void)alarm(0); check_for_sanity = 1; tst_res(TPASS, "finished, cleaning up"); @@ -343,7 +334,7 @@ static void cleanup(void) } else { tst_res(TINFO, "file data okay"); if (!leavefile) - (void)unlink(TEST_FILE); + SAFE_UNLINK(TEST_FILE); tst_res(TPASS, "test passed"); } } else @@ -376,12 +367,10 @@ void child_mapper(char *file, unsigned int procno, unsigned int nprocs) seed = initrand(); /* initialize random seed */ - if (stat(file, &statbuf) == -1) - tst_brk(TFAIL, "stat error"); + SAFE_STAT(file, &statbuf); filesize = statbuf.st_size; - if ((fd = open(file, O_RDWR)) == -1) - tst_brk(TFAIL, "open error"); + fd = SAFE_OPEN(file, O_RDWR); if (statbuf.st_size - sparseoffset > UINT_MAX) tst_brk(TFAIL, "size_t overflow when setting up map"); @@ -406,7 +395,7 @@ void child_mapper(char *file, unsigned int procno, unsigned int nprocs) fd, offset)) == (caddr_t) - 1) tst_brk(TFAIL, "mmap error"); - (void)close(fd); + SAFE_CLOSE(fd); /* * Now loop read/writing random pages. @@ -444,8 +433,7 @@ void child_mapper(char *file, unsigned int procno, unsigned int nprocs) MS_SYNC) == -1) tst_brk(TFAIL, "msync failed"); } - if (munmap(maddr, mapsize) == -1) - tst_brk(TFAIL, "munmap failed"); + SAFE_MUNMAP(maddr, mapsize); exit(0); } @@ -463,14 +451,10 @@ int fileokay(char *file, unsigned char *expbuf) int cnt; unsigned int i, j; - if ((fd = open(file, O_RDONLY)) == -1) - tst_brk(TFAIL, "open error"); - - if (fstat(fd, &statbuf) == -1) - tst_brk(TFAIL, "stat error"); + fd = SAFE_OPEN(file, O_RDONLY); - if (lseek(fd, sparseoffset, SEEK_SET) < 0) - tst_brk(TFAIL, "lseek"); + SAFE_FSTAT(fd, &statbuf); + SAFE_LSEEK(fd, sparseoffset, SEEK_SET); if (statbuf.st_size - sparseoffset > UINT_MAX) tst_brk(TFAIL, "size_t overflow when setting up map"); @@ -490,7 +474,7 @@ int fileokay(char *file, unsigned char *expbuf) tst_res(TINFO, "read %d of %ld bytes", (i * pagesize) + cnt, (long)mapsize); - close(fd); + SAFE_CLOSE(fd); return 0; } } @@ -505,12 +489,12 @@ int fileokay(char *file, unsigned char *expbuf) tst_res(TINFO, ", pg %d off %d, " "(fsize %ld)", i, j, statbuf.st_size); - close(fd); + SAFE_CLOSE(fd); return 0; } } } - close(fd); + SAFE_CLOSE(fd); return 1; }