****************************************************************************/
bool brl_locktest(struct byte_range_lock *br_lck,
- const struct lock_struct *rw_probe)
+ const struct lock_struct *rw_probe,
+ bool upgradable)
{
bool ret = True;
unsigned int i;
* Our own locks don't conflict.
*/
if (brl_conflict_other(&locks[i], rw_probe)) {
- if (br_lck->record == NULL) {
+ if (!upgradable) {
/* readonly */
return false;
}
if (!br_lck) {
return true;
}
- ret = brl_locktest(br_lck, plock);
+ ret = brl_locktest(br_lck, plock, false);
if (!ret) {
/*
if (br_lck == NULL) {
return true;
}
- ret = brl_locktest(br_lck, plock);
+ ret = brl_locktest(br_lck, plock, true);
TALLOC_FREE(br_lck);
}
bool brl_unlock_windows_default(struct byte_range_lock *br_lck,
const struct lock_struct *plock);
bool brl_locktest(struct byte_range_lock *br_lck,
- const struct lock_struct *rw_probe);
+ const struct lock_struct *rw_probe,
+ bool upgradable);
NTSTATUS brl_lockquery(struct byte_range_lock *br_lck,
uint64_t *psmblctx,
struct server_id pid,