From ece94989b8a9e39d080d58bb82958c201af79f0d Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 4 Feb 2011 15:32:09 -0800 Subject: Move the "oplock file with byte range locks" check to the correct place, where we're making oplock decisions. Autobuild-User: Jeremy Allison Autobuild-Date: Sat Feb 5 01:18:14 CET 2011 on sn-devel-104 --- source3/smbd/open.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'source3/smbd/open.c') diff --git a/source3/smbd/open.c b/source3/smbd/open.c index f236243b37d..0ef2b3a90d9 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -1011,6 +1011,17 @@ static bool delay_for_exclusive_oplocks(files_struct *fsp, 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, @@ -1029,6 +1040,10 @@ static void grant_fsp_oplock_type(files_struct *fsp, 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)) { -- cgit