-/* -*- 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.
*
* 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) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
- * Lustre is a trademark of Sun Microsystems, Inc.
*
* lustre/tests/utime.c
*
{
long before_mknod, after_mknod;
const char *prog = argv[0];
- const char *filename = argv[1];
- char *secname = NULL;
- struct utimbuf utb;
+ const char *filename = argv[1];
+ char *secname = NULL;
+ struct utimbuf utb;
struct stat st, st2;
int rc;
- int c;
-
- utb.actime = 200000;
- utb.modtime = 100000;
-
- while ((c = getopt(argc, argv, "s:")) != -1) {
- switch(c) {
- case 's':
- secname = optarg;
- break;
- default:
- usage(argv[0]);
- }
- }
+ int c;
+
+ while ((c = getopt(argc, argv, "s:")) != -1) {
+ switch (c) {
+ case 's':
+ secname = optarg;
+ break;
+ default:
+ usage(argv[0]);
+ }
+ }
if (optind + 1 > argc)
usage(argv[0]);
- /* Adjust the before time back one second, because the kernel's
+ /*
+ * Adjust the before time back one second, because the kernel's
* CURRENT_TIME (lockless clock reading, used to set inode times)
* may drift against the do_gettimeofday() time (TSC-corrected and
* locked clock reading, used to return timestamps to user space).
if (st.st_mtime < before_mknod || st.st_mtime > after_mknod) {
fprintf(stderr,
- "%s: bad mknod times %lu <= %lu <= %lu false\n",
- prog, before_mknod, st.st_mtime, after_mknod);
+ "%s: bad mknod(%s) times %lu <= %lu <= %lu false\n",
+ prog, filename, before_mknod, st.st_mtime,
+ after_mknod);
return 4;
}
printf("%s: good mknod times %lu%s <= %lu <= %lu for %s\n",
- prog, before_mknod, before_mknod == st.st_mtime ? "*":"",
+ prog, before_mknod,
+ before_mknod == st.st_mtime ? "*" : "",
st.st_mtime, after_mknod, filename);
- if (secname) {
- sleep(1);
- rc = stat(secname, &st2);
- if (rc) {
- fprintf(stderr, "%s: stat(%s) failed: rc %d: "
- "%s\n", prog, secname, errno,
- strerror(errno));
- return 5;
- }
-
- if (st2.st_mtime < before_mknod ||
- st2.st_mtime > after_mknod) {
- fprintf(stderr, "%s: bad mknod times %lu <= %lu"
- " <= %lu false\n", prog, before_mknod,
- st2.st_mtime, after_mknod);
- return 6;
- }
-
- printf("%s: good mknod times %lu%s <= %lu <= %lu "
- "for %s\n", prog, before_mknod,
- before_mknod == st.st_mtime ? "*":"",
- st2.st_mtime, after_mknod, secname);
- }
+ if (secname) {
+ sleep(1);
+ rc = stat(secname, &st2);
+ if (rc) {
+ fprintf(stderr,
+ "%s: stat(%s) failed: rc %d: %s\n",
+ prog, secname, errno, strerror(errno));
+ return 5;
+ }
+
+ if (st2.st_mtime < before_mknod ||
+ st2.st_mtime > after_mknod) {
+ fprintf(stderr,
+ "%s: bad mknod(%s) times %lu <= %lu <= %lu false\n",
+ prog, filename, before_mknod,
+ st2.st_mtime, after_mknod);
+ return 6;
+ }
+
+ printf("%s: good mknod times %lu%s <= %lu <= %lu for %s\n",
+ prog, before_mknod,
+ before_mknod == st.st_mtime ? "*" : "",
+ st2.st_mtime, after_mknod, secname);
+ }
}
- /* See above */
+ utb.actime = 200000;
+ utb.modtime = 100000;
rc = utime(filename, &utb);
if (rc) {
fprintf(stderr, "%s: utime(%s) failed: rc %d: %s\n",
prog, filename, errno, strerror(errno));
return 7;
}
-
+
rc = stat(filename, &st);
if (rc) {
fprintf(stderr, "%s: second stat(%s) failed: rc %d: %s\n",
return 8;
}
- if (st.st_mtime != utb.modtime ) {
- fprintf(stderr, "%s: bad utime mtime %lu should be %lu\n",
- prog, st.st_mtime, utb.modtime);
+ if (st.st_mtime != utb.modtime) {
+ fprintf(stderr, "%s: bad utime mtime(%s) %lu should be %lu\n",
+ prog, filename, st.st_mtime, utb.modtime);
return 9;
}
- if (st.st_atime != utb.actime ) {
- fprintf(stderr, "%s: bad utime atime %lu should be %lu\n",
- prog, st.st_atime, utb.actime);
+ if (st.st_atime != utb.actime) {
+ fprintf(stderr, "%s: bad utime atime(%s) %lu should be %lu\n",
+ prog, filename, st.st_atime, utb.actime);
return 10;
}
printf("%s: good utime mtimes %lu, atime %lu\n",
prog, utb.modtime, utb.actime);
- if (secname == NULL)
- return 0;
-
- /* Checking that times in past get updated on another client. */
+ if (!secname)
+ return 0;
+
+ /* Checking that times in past get updated on another client. */
rc = stat(secname, &st2);
- if (rc) {
+ if (rc) {
fprintf(stderr, "%s: second stat(%s) failed: rc %d: %s\n",
prog, secname, errno, strerror(errno));
return 12;
}
if (st2.st_mtime != st.st_mtime) {
- fprintf(stderr, "%s: not synced mtime between clients: %lu "
- "should be %lu\n", prog, st2.st_mtime, st.st_mtime);
+ fprintf(stderr,
+ "%s: not synced mtime(%s) between clients: %lu should be %lu\n",
+ prog, secname, st2.st_mtime, st.st_mtime);
return 13;
}
if (st2.st_ctime != st.st_ctime) {
- fprintf(stderr, "%s: not synced ctime between clients: %lu "
- " should be %lu\n", prog, st2.st_ctime, st.st_ctime);
+ fprintf(stderr,
+ "%s: not synced ctime(%s) between clients: %lu should be %lu\n",
+ prog, secname, st2.st_ctime, st.st_ctime);
return 14;
}
-
- printf("%s: updated times for %s\n", prog, secname);
-
+
+ printf("%s: updated times for %s\n", prog, secname);
+
return 0;
}