X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fwriteme.c;h=0c9eaf23a32f8bff070c3ebc07eb4e0910ab7759;hb=1de3c3455868670c289ed1d69f57244816ea39b5;hp=0fdd79873ffe0108412d04f2a2eee8def4e67fab;hpb=6869932b552ac705f411de3362f01bd50c1f6f7d;p=fs%2Flustre-release.git diff --git a/lustre/tests/writeme.c b/lustre/tests/writeme.c index 0fdd798..0c9eaf2 100644 --- a/lustre/tests/writeme.c +++ b/lustre/tests/writeme.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -17,21 +15,18 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2011, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. */ #include @@ -39,44 +34,70 @@ #include #include #include +#include void usage(char *prog) { - printf("usage: %s [-s] filename\n", prog); + printf("usage: %s [-s] [-b ] filename\n", prog); + exit(1); } int main(int argc, char **argv) { - int fd, rc; - int do_sync = 0; - int i = 0; - int file_arg = 1; - char buf[4096]; + bool limit_write = false, do_sync = false; + int c, per_write, fd, rc; + unsigned long bytes = 0; + char buf[4096]; + char *endptr = NULL; - memset(buf, 0, 4096); + while ((c = getopt(argc, argv, "sb:")) != -1) { + switch (c) { + case 's': + do_sync = true; + break; + case 'b': + limit_write = true; + bytes = strtoul(optarg, &endptr, 10); + if (endptr != NULL && *endptr != '\0') + usage(argv[0]); + break; + default: + usage(argv[0]); + break; + } + } - if (argc < 2 || argc > 3) { + if (argc - optind != 1) usage(argv[0]); - exit(1); - } - if (strcmp(argv[1], "-s") == 0) { - do_sync = 1; - file_arg++; - } + memset(buf, 0, 4096); + fd = open(argv[optind], O_RDWR | O_CREAT, 0600); + if (fd == -1) { + printf("Error opening %s\n", argv[1]); + exit(1); + } + + /* Even 0 bytes, write at least once */ + if (limit_write) { + do { + per_write = bytes > 4096 ? 4096 : bytes; + rc = write(fd, buf, per_write); + if (rc > 0) + bytes -= rc; + else if (rc < 0) + break; + } while (bytes > 0); - fd = open(argv[file_arg], O_RDWR | O_CREAT, 0600); - if (fd == -1) { - printf("Error opening %s\n", argv[1]); - exit(1); - } + return rc >= 0 ? 0 : rc; + } - while (1) { - sprintf(buf, "write %d\n", i); - rc = write(fd, buf, sizeof(buf)); + for (rc = 0; ;) { + sprintf(buf, "write %d\n", rc); + rc = write(fd, buf, sizeof(buf)); if (do_sync) sync(); - sleep(1); - } - return 0; + sleep(1); + } + + return 0; }