req_capsule_filled_sizes(pill, RCL_CLIENT);
avail = ldlm_capsule_handles_avail(pill, RCL_CLIENT, canceloff);
- lru_flags = ns_connect_lru_resize(ns) ?
- LDLM_LRU_FLAG_LRUR_NO_WAIT : LDLM_LRU_FLAG_AGED;
+ lru_flags = LDLM_LRU_FLAG_NO_WAIT | (ns_connect_lru_resize(ns) ?
+ LDLM_LRU_FLAG_LRUR : LDLM_LRU_FLAG_AGED);
to_free = !ns_connect_lru_resize(ns) &&
opc == LDLM_ENQUEUE ? 1 : 0;
return LDLM_POLICY_CANCEL_LOCK;
}
+static enum ldlm_policy_res
+ldlm_cancel_aged_no_wait_policy(struct ldlm_namespace *ns,
+ struct ldlm_lock *lock,
+ int unused, int added, int count)
+{
+ enum ldlm_policy_res result;
+
+ result = ldlm_cancel_aged_policy(ns, lock, unused, added, count);
+ if (result == LDLM_POLICY_KEEP_LOCK)
+ return result;
+
+ return ldlm_cancel_no_wait_policy(ns, lock, unused, added, count);
+}
+
/**
* Callback function for default policy. Makes decision whether to keep \a lock
* in LRU for current LRU size \a unused, added in current scan \a added and
static ldlm_cancel_lru_policy_t
ldlm_cancel_lru_policy(struct ldlm_namespace *ns, enum ldlm_lru_flags lru_flags)
{
- if (lru_flags & LDLM_LRU_FLAG_NO_WAIT)
- return ldlm_cancel_no_wait_policy;
-
if (ns_connect_lru_resize(ns)) {
if (lru_flags & LDLM_LRU_FLAG_SHRINK)
/* We kill passed number of old locks. */
return ldlm_cancel_passed_policy;
- if (lru_flags & LDLM_LRU_FLAG_LRUR)
- return ldlm_cancel_lrur_policy;
+ if (lru_flags & LDLM_LRU_FLAG_LRUR) {
+ if (lru_flags & LDLM_LRU_FLAG_NO_WAIT)
+ return ldlm_cancel_lrur_no_wait_policy;
+ else
+ return ldlm_cancel_lrur_policy;
+ }
if (lru_flags & LDLM_LRU_FLAG_PASSED)
return ldlm_cancel_passed_policy;
- else if (lru_flags & LDLM_LRU_FLAG_LRUR_NO_WAIT)
- return ldlm_cancel_lrur_no_wait_policy;
} else {
- if (lru_flags & LDLM_LRU_FLAG_AGED)
- return ldlm_cancel_aged_policy;
+ if (lru_flags & LDLM_LRU_FLAG_AGED) {
+ if (lru_flags & LDLM_LRU_FLAG_NO_WAIT)
+ return ldlm_cancel_aged_no_wait_policy;
+ else
+ return ldlm_cancel_aged_policy;
+ }
}
+ if (lru_flags & LDLM_LRU_FLAG_NO_WAIT)
+ return ldlm_cancel_no_wait_policy;
return ldlm_cancel_default_policy;
}
ldlm_cancel_lru_policy_t pf;
struct ldlm_lock *lock, *next;
int added = 0, unused, remained;
- int no_wait = lru_flags & (LDLM_LRU_FLAG_NO_WAIT |
- LDLM_LRU_FLAG_LRUR_NO_WAIT);
+ int no_wait = lru_flags & LDLM_LRU_FLAG_NO_WAIT;
ENTRY;
spin_lock(&ns->ns_lock);