+ case 'e':
+ commands++;
+ switch (*commands) {
+ case 'U':
+ rc = llapi_lease_release(fd);
+ break;
+ case 'R':
+ rc = llapi_lease_acquire(fd, LL_LEASE_RDLCK);
+ break;
+ case 'W':
+ rc = llapi_lease_acquire(fd, LL_LEASE_WRLCK);
+ break;
+ default:
+ errx(-1, "unknown mode: %c", *commands);
+ }
+ if (rc < 0)
+ err(errno, "apply/unlock lease error");
+
+ if (flags != LL_LEASE_UNLCK)
+ break;
+
+ /* F_UNLCK, interpret return code */
+ if (rc > 0) {
+ const char *str = "unknown";
+ if (rc == LL_LEASE_RDLCK)
+ str = "read";
+ else if (rc == LL_LEASE_WRLCK)
+ str = "write";
+ fprintf(stdout, "%s lease(%lld) 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 = llapi_lease_check(fd);
+ if (rc > 0) {
+ const char *str = "unknown";
+
+ if (rc == LL_LEASE_RDLCK)
+ str = "read";
+ else if (rc == LL_LEASE_WRLCK)
+ str = "write";
+ fprintf(stdout, "%s lease(%lld) 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;