Conflict checking loop should continue until ownlocks is set.
Ownlocks variable is essential for lock merges.
Lustre-change: https://review.whamcloud.com/55184
Lustre-commit:
ede8d928d6c47551371512c80dfa4f159260e7e2
Fixes:
b07a57027e (LU-15402 ldlm: speedup RD flock enqueue)
Signed-off-by: Sergey Cheremencev <scherementsev@ddn.com>
Signed-off-by: Andriy Skulysh <andriy.skulysh@hpe.com>
Change-Id: Ied526581dd7d4f100c95f2fe582d117a87a8a584
Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/55246
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Yang Sheng <ys@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
#ifdef HAVE_SERVER_SUPPORT
else {
int reprocess_failed = 0;
+ int pr_matched = 0;
+
lockmode_verify(mode);
/* This loop determines if there are existing locks
l_res_link);
if (ldlm_same_flock_owner(lock, req)) {
- if (!ownlocks)
+ if (!ownlocks) {
ownlocks = tmp;
+ if (pr_matched)
+ break;
+ }
continue;
}
lock->l_policy_data.l_flock.end >=
req->l_policy_data.l_flock.end) {
/* there can't be granted WR lock */
- break;
+ if (ownlocks)
+ break;
+ pr_matched = 1;
+ continue;
}
/* locks are compatible, overlap doesn't matter */
if (lockmode_compat(lock->l_granted_mode, mode))