+ if (lock->l_extent.end < req_ex->start)
+ new_ex->start = MIN(lock->l_extent.end, new_ex->start);
+ else {
+ if (lock->l_extent.start < req_ex->start &&
+ !lockmode_compat(lock->l_req_mode, mode))
+ /* Policy: minimize conflict overlap */
+ new_ex->start = req_ex->start;
+ }
+ if (lock->l_extent.start > req_ex->end)
+ new_ex->end = MAX(lock->l_extent.start, new_ex->end);
+ else {
+ if (lock->l_extent.end > req_ex->end &&
+ !lockmode_compat(lock->l_req_mode, mode))
+ /* Policy: minimize conflict overlap */
+ new_ex->end = req_ex->end;
+ }
+ }