X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fmultiop.c;h=814bd88281f27349fff1172b1a3a1cfd5bacc4b4;hb=3e1cff73c9abe513cb691ff0e81da332a6434a94;hp=86274f294aad732681e965d8905fe7b268a3fe18;hpb=d1d08e3742490dec17239bcc0d4690587d4e09b6;p=fs%2Flustre-release.git diff --git a/lustre/tests/multiop.c b/lustre/tests/multiop.c old mode 100755 new mode 100644 index 86274f2..814bd88 --- a/lustre/tests/multiop.c +++ b/lustre/tests/multiop.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. @@ -26,8 +24,10 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -44,12 +44,16 @@ #include #include #include +#include +#include #include #include #include #include -#include -#include +#include + +#include +#include #define T1 "write data before unlink\n" #define T2 "write data after unlink\n" @@ -57,7 +61,7 @@ char msg[] = "yabba dabba doo, I'm coming for you, I live in a shoe, I don't kno char *buf, *buf_align; int bufsize = 0; sem_t sem; -#define ALIGN 65535 +#define ALIGN_LEN 65535 char usage[] = "Usage: %s filename command-sequence\n" @@ -66,6 +70,10 @@ char usage[] = " C[num] create with optional stripes\n" " d mkdir\n" " D open(O_DIRECTORY)\n" +" f statfs\n" +" F print FID\n" +" G gid get grouplock\n" +" g gid put grouplock\n" " L link\n" " l symlink\n" " m mknod\n" @@ -82,6 +90,7 @@ char usage[] = " u unlink\n" " U munmap\n" " v verbose\n" +" V open a volatile file\n" " w[num] write optional length\n" " W write entire mmap-ed region\n" " y fsync\n" @@ -179,19 +188,22 @@ int get_flags(char *data, int *rflags) } #define POP_ARG() (pop_arg(argc, argv)) -#define min(a,b) ((a)>(b)?(b):(a)) int main(int argc, char **argv) { - char *fname, *commands; - const char *newfile; - struct stat st; - size_t mmap_len = 0, i; - unsigned char *mmap_ptr = NULL, junk = 0; - int rc, len, fd = -1; - int flags; - int save_errno; - int verbose = 0; + char *fname, *commands; + const char *newfile; + struct stat st; + struct statfs stfs; + size_t mmap_len = 0, i; + unsigned char *mmap_ptr = NULL, junk = 0; + int rc, len, fd = -1; + int flags; + int save_errno; + int verbose = 0; + int gid = 0; + lustre_fid fid; + struct timespec ts; if (argc < 3) { fprintf(stderr, usage, argv[0]); @@ -213,7 +225,12 @@ int main(int argc, char **argv) printf("PAUSING\n"); fflush(stdout); } - while (sem_wait(&sem) == -1 && errno == EINTR); + len = atoi(commands+1); + if (len <= 0) + len = 3600; /* 1 hour */ + ts.tv_sec = time(NULL) + len; + ts.tv_nsec = 0; + while (sem_timedwait(&sem, &ts) < 0 && errno == EINTR); break; case 'c': if (close(fd) == -1) { @@ -248,6 +265,41 @@ int main(int argc, char **argv) exit(save_errno); } break; + case 'f': + if (statfs(fname, &stfs) == -1) { + save_errno = errno; + perror("statfs()"); + exit(save_errno); + } + break; + case 'F': + if (fd == -1) + rc = llapi_path2fid(fname, &fid); + else + rc = llapi_fd2fid(fd, &fid); + if (rc != 0) + fprintf(stderr, + "llapi_path/fd2fid() on %d, rc=%d\n", + fd, rc); + else + printf(DFID"\n", PFID(&fid)); + break; + case 'G': + gid = atoi(commands+1); + if (ioctl(fd, LL_IOC_GROUP_LOCK, gid) == -1) { + save_errno = errno; + perror("ioctl(GROUP_LOCK)"); + exit(save_errno); + } + break; + case 'g': + gid = atoi(commands+1); + if (ioctl(fd, LL_IOC_GROUP_UNLOCK, gid) == -1) { + save_errno = errno; + perror("ioctl(GROUP_UNLOCK)"); + exit(save_errno); + } + break; case 'l': newfile = POP_ARG(); if (!newfile) @@ -311,43 +363,49 @@ int main(int argc, char **argv) case 'o': len = get_flags(commands+1, &flags); commands += len; - fd = open(fname, flags); + if (flags & O_CREAT) + fd = open(fname, flags, 0666); + else + fd = open(fname, flags); if (fd == -1) { save_errno = errno; perror("open"); exit(save_errno); } break; - case 'r': - len = atoi(commands+1); - if (len <= 0) - len = 1; - if (bufsize < len) { - buf = realloc(buf, len + ALIGN); - if (buf == NULL) { - save_errno = errno; - perror("allocating buf for read\n"); - exit(save_errno); - } - bufsize = len; - buf_align = (char *)((long)(buf + ALIGN) & - ~ALIGN); - } - while (len > 0) { - rc = read(fd, buf_align, len); - if (rc == -1) { - save_errno = errno; - perror("read"); - exit(save_errno); - } - if (rc < len) - fprintf(stderr, "short read: %u/%u\n", - rc, len); - len -= rc; - if (verbose >= 2) - printf("%.*s\n", rc, buf_align); - } - break; + case 'r': + len = atoi(commands+1); + if (len <= 0) + len = 1; + if (bufsize < len) { + buf = realloc(buf, len + ALIGN_LEN); + if (buf == NULL) { + save_errno = errno; + perror("allocating buf for read\n"); + exit(save_errno); + } + bufsize = len; + buf_align = (char *)((long)(buf + ALIGN_LEN) & + ~ALIGN_LEN); + } + while (len > 0) { + rc = read(fd, buf_align, len); + if (rc == -1) { + save_errno = errno; + perror("read"); + exit(save_errno); + } + if (rc < len) { + fprintf(stderr, "short read: %u/%u\n", + rc, len); + if (rc == 0) + exit(ENODATA); + } + len -= rc; + if (verbose >= 2) + printf("%.*s\n", rc, buf_align); + } + break; case 'R': for (i = 0; i < mmap_len && mmap_ptr; i += 4096) junk += mmap_ptr[i]; @@ -399,35 +457,44 @@ int main(int argc, char **argv) case 'v': verbose++; break; - case 'w': - len = atoi(commands+1); - if (len <= 0) - len = 1; - if (bufsize < len) { - buf = realloc(buf, len + ALIGN); - if (buf == NULL) { - save_errno = errno; - perror("allocating buf for write\n"); - exit(save_errno); - } - bufsize = len; - buf_align = (char *)((long)(buf + ALIGN) & - ~ALIGN); - strncpy(buf_align, msg, bufsize); - } - while (len > 0) { - rc = write(fd, buf_align, len); - if (rc == -1) { - save_errno = errno; - perror("write"); - exit(save_errno); - } - if (rc < len) - fprintf(stderr, "short write: %u/%u\n", - rc, len); - len -= rc; - } - break; + case 'V': + len = get_flags(commands + 1, &flags); + commands += len; + fd = llapi_create_volatile(fname, flags); + if (fd < 0) { + perror("llapi_create_volatile"); + exit(fd); + } + break; + case 'w': + len = atoi(commands+1); + if (len <= 0) + len = 1; + if (bufsize < len) { + buf = realloc(buf, len + ALIGN_LEN); + if (buf == NULL) { + save_errno = errno; + perror("allocating buf for write\n"); + exit(save_errno); + } + bufsize = len; + buf_align = (char *)((long)(buf + ALIGN_LEN) & + ~ALIGN_LEN); + strncpy(buf_align, msg, bufsize); + } + while (len > 0) { + rc = write(fd, buf_align, len); + if (rc == -1) { + save_errno = errno; + perror("write"); + exit(save_errno); + } + if (rc < len) + fprintf(stderr, "short write: %u/%u\n", + rc, len); + len -= rc; + } + break; case 'W': for (i = 0; i < mmap_len && mmap_ptr; i += 4096) mmap_ptr[i] += junk++;