4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License version 2 for more details (a copy is included
14 * in the LICENSE file that accompanied this code).
16 * You should have received a copy of the GNU General Public License
17 * version 2 along with this program; If not, see
18 * http://www.gnu.org/licenses/gpl-2.0.html
23 * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
24 * Use is subject to license terms.
26 * Copyright (c) 2014, Intel Corporation.
29 * This file is part of Lustre, http://www.lustre.org/
30 * Lustre is a trademark of Sun Microsystems, Inc.
32 * lustre/tests/lp_utils.c
34 * Author: You Feng <youfeng@clusterfs.com>
42 #include <sys/types.h>
45 #include <sys/ioctl.h>
50 #define MAX_PROCESSES 8
57 struct timeval t1, t2;
61 static char datestring[80];
65 timestamp = time(NULL);
66 strftime(datestring, 80, "%T", localtime(×tamp));
73 if (verbose > 0 && rank == 0) {
74 gettimeofday(&t1, NULL);
75 printf("%s:\tBeginning %s\n", timestamp(), str);
84 MPI_Barrier(MPI_COMM_WORLD);
85 if (verbose > 0 && rank == 0) {
86 gettimeofday(&t2, NULL);
87 elapsed = (t2.tv_sec + ((float)t2.tv_usec / 1000000)) -
88 (t1.tv_sec + ((float)t1.tv_usec / 1000000));
90 printf("%s:\tFinished %-15s(%.2f min)\n", timestamp(),
93 printf("%s:\tFinished %-15s(%.3f sec)\n",
94 timestamp(), str, elapsed);
100 void dump_diff(char *orig_buf, char *buf, int size, long _off)
105 printf("commpared buf size %d, at offset %lu\n\n", size, _off);
108 printf("original buf:\n");
110 end = orig_buf + size;
113 printf(" %8lx", *(long *)p);
125 printf("different data: diff_data(orig_data)\n");
132 if (memcmp(p, orig_buf + off, sizeof(long)) != 0) {
133 printf("\toff: %5d,\tdata: %8lx (%8lx)\n", off,
135 *(unsigned long *)(orig_buf + off));
141 printf("\n %d total differents found\n\n", diff);
145 void lp_gethostname(void)
147 if (gethostname(hostname, 1024) == -1) {
148 fprintf(stderr, "gethostname: (%d)%s", errno, strerror(errno));
149 MPI_Abort(MPI_COMM_WORLD, 2);
154 * This function does not FAIL if the requested "name" does not exit.
155 * This is just to clean up any files or directories left over from
158 void remove_file_or_dir(char *name)
162 if (stat(name, &statbuf) != -1) {
163 if (S_ISREG(statbuf.st_mode)) {
164 printf("stale file found\n");
165 if (unlink(name) == -1)
166 FAILF("unlink of %s", name);
168 if (S_ISDIR(statbuf.st_mode)) {
169 printf("stale directory found\n");
170 if (rmdir(name) == -1)
171 FAILF("rmdir of %s", name);
176 void create_file(char *name, long filesize, int fill)
178 static char filename[MAX_FILENAME_LEN];
183 long left = filesize;
185 /* Process 0 creates the test file(s) */
187 sprintf(filename, "%s/%s", testdir, name);
188 remove_file_or_dir(filename);
189 fd = creat(filename, FILEMODE);
191 FAILF("create of file %s", filename);
194 if (lseek(fd, filesize - 1, SEEK_SET) == -1) {
196 FAILF("lseek of file %s", filename);
198 if (write(fd, &zero, 1) == -1) {
200 FAILF("write of file %s", filename);
203 if (filesize > 0 && fill) {
204 if (lseek(fd, 0, SEEK_SET) == -1) {
206 FAILF("lseek of file %s", filename);
208 memset(buf, c, 1024);
210 rc = write(fd, buf, MAX(left, 8192));
213 FAILF("write of file %s", filename);
219 FAILF("close of file %s", filename);
223 void check_stat(char *filename, struct stat *state, struct stat *old_state)
225 if (stat(filename, state) == -1)
226 FAILF("stat of file %s", filename);
228 if (memcmp(state, old_state, sizeof(struct stat)) != 0) {
230 FAILF(LP_STAT_FMT, LP_STAT_ARGS);
234 void remove_file(char *name)
236 char filename[MAX_FILENAME_LEN];
238 /* Process 0 remove the file(s) */
240 sprintf(filename, "%s/%s", testdir, name);
241 if (unlink(filename) == -1)
242 FAILF("unlink of file %s", filename);
246 void fill_stride(char *buf, int buf_size, long long rank, long long _off)
249 long long off, data[2];
250 int cp, left = buf_size;
256 cp = left > sizeof(data) ? sizeof(data) : left;