return false;
}
+static bool file_has_brlocks(files_struct *fsp)
+{
+ struct byte_range_lock *br_lck;
+
+ br_lck = brl_get_locks_readonly(fsp);
+ if (!br_lck)
+ return false;
+
+ return br_lck->num_locks > 0 ? true : false;
+}
+
static void grant_fsp_oplock_type(files_struct *fsp,
int oplock_request,
bool got_level2_oplock,
DEBUG(10,("grant_fsp_oplock_type: oplock type 0x%x on file %s\n",
fsp->oplock_type, fsp_str_dbg(fsp)));
return;
+ } else if (lp_locking(fsp->conn->params) && file_has_brlocks(fsp)) {
+ DEBUG(10,("grant_fsp_oplock_type: file %s has byte range locks\n",
+ fsp_str_dbg(fsp)));
+ fsp->oplock_type = NO_OPLOCK;
}
if (is_stat_open(fsp->access_mask)) {
msg, MSG_SMB_KERNEL_BREAK_SIZE);
}
-static bool file_has_brlocks(files_struct *fsp)
-{
- struct byte_range_lock *br_lck;
-
- br_lck = brl_get_locks_readonly(fsp);
- if (!br_lck)
- return false;
-
- return br_lck->num_locks > 0 ? true : false;
-}
-
/****************************************************************************
Attempt to set an oplock on a file. Succeeds if kernel oplocks are
disabled (just sets flags) and no byte-range locks in the file. Returns True
bool set_file_oplock(files_struct *fsp, int oplock_type)
{
if (fsp->oplock_type == LEVEL_II_OPLOCK) {
- if (lp_locking(fsp->conn->params) && file_has_brlocks(fsp)) {
- DEBUG(10, ("Refusing level2 oplock because of "
- "byte-range locks on the file\n"));
- return false;
- }
-
if (koplocks &&
!(koplocks->flags & KOPLOCKS_LEVEL2_SUPPORTED)) {
DEBUG(10, ("Refusing level2 oplock, kernel oplocks "