X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fmultiop.c;h=0bb9826d242714a67795f525a4b4d2d3b5e97707;hb=2f253abab679c21b41197379b23e36943e5995a7;hp=541e1b0d467b38f5e5e67bc90273b2263a468b07;hpb=a61ff5914bf6b784b22eea0625bb8b61d7bea950;p=fs%2Flustre-release.git diff --git a/lustre/tests/multiop.c b/lustre/tests/multiop.c index 541e1b0..0bb9826 100644 --- a/lustre/tests/multiop.c +++ b/lustre/tests/multiop.c @@ -51,6 +51,7 @@ #include #include #include +#include #include #include @@ -71,8 +72,11 @@ char usage[] = " C[num] create with optional stripes\n" " d mkdir\n" " D open(O_DIRECTORY)\n" +" e[R|W|U] apply lease. R: Read; W: Write; U: Unlock\n" +" E[+|-] get lease. +/-: expect lease to (not) exist\n" " f statfs\n" " F print FID\n" +" H[num] create HSM released file with num stripes\n" " G gid get grouplock\n" " g gid put grouplock\n" " K link path to filename\n" @@ -146,6 +150,9 @@ struct flag_mapping { #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}, @@ -285,13 +292,71 @@ 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 'e': + commands++; + switch (*commands) { + case 'U': + flags = F_UNLCK; + break; + case 'R': + flags = F_RDLCK; + break; + case 'W': + flags = F_WRLCK; + break; + default: + errx(-1, "unknown mode: %c", *commands); + } + + rc = ioctl(fd, LL_IOC_SET_LEASE, flags); + if (rc < 0) + err(errno, "apply lease error"); + + if (flags != F_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"; + fprintf(stdout, "%s lease(%d) released.\n", + str, rc); + } else if (rc == 0) { + fprintf(stdout, "lease already broken.\n"); + } + break; + case 'E': + commands++; + if (*commands != '-' && *commands != '+') + errx(-1, "unknown mode: %c\n", *commands); + + rc = ioctl(fd, LL_IOC_GET_LEASE); + if (rc > 0) { + const char *str = "Unknown"; + + if (rc == FMODE_READ) + str = "FMODE_READ"; + else if (rc == FMODE_WRITE) + str = "FMODE_WRITE"; + fprintf(stdout, "%s lease(%d) has applied.\n", + str, rc); + if (*commands == '-') + errx(-1, "expect lease to not exist"); + } else if (rc == 0) { + fprintf(stdout, "no lease applied.\n"); + if (*commands == '+') + errx(-1, "expect lease exists"); + } else { + err(errno, "free lease error"); + } + break; + case 'f': + if (statfs(fname, &stfs) == -1) + errx(-1, "statfs()"); + break; case 'F': if (fd == -1) rc = llapi_path2fid(fname, &fid); @@ -570,11 +635,12 @@ int main(int argc, char **argv) } 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) {