+ /* Get a write lease, release and take a read one */
+ fd = open(filename, O_RDWR);
+ ASSERTF(fd >= 0, "open failed for '%s': %s", filename, strerror(errno));
+
+ rc = llapi_lease_acquire(fd, LL_LEASE_WRLCK);
+ ASSERTF(rc == 0, "cannot get lease '%s': %s", filename, strerror(-rc));
+
+ rc = llapi_lease_check(fd);
+ ASSERTF(rc == LL_LEASE_WRLCK,
+ "invalid lease type on '%s': %s", filename, strerror(-rc));
+
+ rc = llapi_lease_release(fd);
+ ASSERTF(rc == LL_LEASE_WRLCK, "was not able to put back lease '%s': %s",
+ filename, strerror(-rc));
+
+ rc = llapi_lease_check(fd);
+ ASSERTF(rc == 0,
+ "invalid lease type on '%s': %s", filename, strerror(-rc));
+
+ rc = llapi_lease_acquire(fd, LL_LEASE_RDLCK);
+ ASSERTF(rc == 0, "cannot get lease '%s': %s", filename, strerror(-rc));
+
+ close(fd);
+
+ /* Get a read lease, release and take a write one */
+ fd = open(filename, O_RDWR);
+ ASSERTF(fd >= 0, "open failed for '%s': %s", filename, strerror(errno));
+
+ rc = llapi_lease_acquire(fd, LL_LEASE_RDLCK);
+ ASSERTF(rc == 0, "cannot get lease '%s': %s", filename, strerror(-rc));
+
+ rc = llapi_lease_check(fd);
+ ASSERTF(rc == LL_LEASE_RDLCK,
+ "invalid lease type on '%s': %s", filename, strerror(-rc));
+
+ rc = llapi_lease_release(fd);
+ ASSERTF(rc == LL_LEASE_RDLCK, "was not able to put back lease '%s': %s",
+ filename, strerror(-rc));
+
+ rc = llapi_lease_check(fd);
+ ASSERTF(rc == 0,
+ "invalid lease type on '%s': %s", filename, strerror(-rc));
+
+ rc = llapi_lease_acquire(fd, LL_LEASE_WRLCK);
+ ASSERTF(rc == 0, "cannot get lease '%s': %s", filename, strerror(-rc));
+
+ close(fd);
+