+ if (!l->breaking) {
+ DBG_WARNING("Attempt to break from %"PRIu32" to %"PRIu32" - "
+ "but we're not in breaking state\n",
+ l->current_state, lease_state);
+ TALLOC_FREE(lck);
+ return NT_STATUS_UNSUCCESSFUL;
+ }
+
+ /*
+ * Can't upgrade anything: l->breaking_to_requested (and l->current_state)
+ * must be a strict bitwise superset of new_lease_state
+ */
+ if ((lease_state & l->breaking_to_requested) != lease_state) {
+ DBG_WARNING("Attempt to upgrade from %"PRIu32" to %"PRIu32" "
+ "- expected %"PRIu32"\n",
+ l->current_state, lease_state,
+ l->breaking_to_requested);
+ TALLOC_FREE(lck);
+ return NT_STATUS_REQUEST_NOT_ACCEPTED;
+ }
+
+ if (l->current_state != lease_state) {
+ l->current_state = lease_state;
+ d->modified = true;
+ }
+
+ status = NT_STATUS_OK;
+
+ d->modified = true;
+
+ if ((lease_state & ~l->breaking_to_required) != 0) {