/*
* 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/
#include <sys/stat.h>
#include <sys/mman.h>
#include <sys/vfs.h>
+#include <sys/ioctl.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <semaphore.h>
+#include <time.h>
#include <lustre/lustreapi.h>
int save_errno;
int verbose = 0;
int gid = 0;
+ struct timespec ts;
if (argc < 3) {
fprintf(stderr, usage, argv[0]);
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) {
perror("read");
exit(save_errno);
}
- if (rc < len)
- fprintf(stderr, "short read: %u/%u\n",
- rc, len);
+ 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);