* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2012, 2013, Intel Corporation.
+ * Copyright (c) 2012, 2014, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#include <sys/mman.h>
#include <sys/vfs.h>
#include <sys/ioctl.h>
+#include <sys/xattr.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
int bufsize = 0;
sem_t sem;
#define ALIGN_LEN 65535
+#define XATTR "user.multiop"
char usage[] =
"Usage: %s filename command-sequence [path...]\n"
" command-sequence items:\n"
+" A fsetxattr(\"user.multiop\")\n"
+" a fgetxattr(\"user.multiop\")\n"
" c close\n"
" B[num] call setstripe ioctl to create stripes\n"
" C[num] create with optional stripes\n"
#ifdef O_DIRECT
{"O_DIRECT", O_DIRECT},
#endif
+#ifdef O_NOATIME
+ {"O_NOATIME", O_NOATIME},
+#endif
{"O_LARGEFILE", O_LARGEFILE},
{"O_DIRECTORY", O_DIRECTORY},
{"O_NOFOLLOW", O_NOFOLLOW},
ts.tv_nsec = 0;
while (sem_timedwait(&sem, &ts) < 0 && errno == EINTR);
break;
+ case 'A':
+ if (fsetxattr(fd, XATTR, "multiop", 8, 0)) {
+ save_errno = errno;
+ perror("fsetxattr");
+ exit(save_errno);
+ }
+ break;
+ case 'a':
+ if (fgetxattr(fd, XATTR, NULL, 0) == -1) {
+ save_errno = errno;
+ perror("fgetxattr");
+ exit(save_errno);
+ }
+ break;
case 'c':
if (close(fd) == -1) {
save_errno = errno;
commands++;
switch (*commands) {
case 'U':
- flags = F_UNLCK;
+ flags = LL_LEASE_UNLCK;
break;
case 'R':
- flags = F_RDLCK;
+ flags = LL_LEASE_RDLCK;
break;
case 'W':
- flags = F_WRLCK;
+ flags = LL_LEASE_WRLCK;
break;
default:
errx(-1, "unknown mode: %c", *commands);
if (rc < 0)
err(errno, "apply lease error");
- if (flags != F_UNLCK)
+ if (flags != LL_LEASE_UNLCK)
break;
/* F_UNLCK, interpret return code */
if (rc > 0) {
- const char *str = "Unknown";
- if (rc == FMODE_READ)
- str = "FMODE_READ";
- else if (rc == FMODE_WRITE)
- str = "FMODE_WRITE";
+ const char *str = "unknown";
+ if (rc == LL_LEASE_RDLCK)
+ str = "read";
+ else if (rc == LL_LEASE_WRLCK)
+ str = "write";
fprintf(stdout, "%s lease(%d) released.\n",
str, rc);
} else if (rc == 0) {
rc = ioctl(fd, LL_IOC_GET_LEASE);
if (rc > 0) {
- const char *str = "Unknown";
+ const char *str = "unknown";
- if (rc == FMODE_READ)
- str = "FMODE_READ";
- else if (rc == FMODE_WRITE)
- str = "FMODE_WRITE";
+ if (rc == LL_LEASE_RDLCK)
+ str = "read";
+ else if (rc == LL_LEASE_WRLCK)
+ str = "write";
fprintf(stdout, "%s lease(%d) has applied.\n",
str, rc);
if (*commands == '-')
}
break;
case 'Y':
- if (fdatasync(fd) == -1) {
- save_errno = errno;
- perror("fdatasync");
- exit(save_errno);
- }
+ if (fdatasync(fd) == -1) {
+ save_errno = errno;
+ perror("fdatasync");
+ exit(save_errno);
+ }
+ break;
case 'z':
len = atoi(commands+1);
if (lseek(fd, len, SEEK_SET) == -1) {