summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Prouty <tprouty@samba.org>2009-01-09 13:07:58 -0800
committerTim Prouty <tprouty@samba.org>2009-02-09 23:47:44 -0800
commit9c1310fa6ae1a67dc0fea3bf549d805ff167e78f (patch)
tree7f76f09d7839a7e8ef3caf12280a471bce3032f7
parent122dbbf00acc1768f98e5b57e94aab2b61671f40 (diff)
downloadsamba-9c1310fa6ae1a67dc0fea3bf549d805ff167e78f.tar.gz
samba-9c1310fa6ae1a67dc0fea3bf549d805ff167e78f.tar.bz2
samba-9c1310fa6ae1a67dc0fea3bf549d805ff167e78f.zip
s3 oplocks: Differentiate between releasing an oplock vs. downgrading to Level 2 for kernel oplocks
Pass in an extra argument when releasing an oplock so kernel oplock implementations can support downgrading from Level 1 to Level 2.
-rw-r--r--source3/include/smb.h2
-rw-r--r--source3/smbd/oplock.c4
-rw-r--r--source3/smbd/oplock_irix.c2
-rw-r--r--source3/smbd/oplock_linux.c2
4 files changed, 5 insertions, 5 deletions
diff --git a/source3/include/smb.h b/source3/include/smb.h
index 100ec21031..96cd3b7d85 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -1701,7 +1701,7 @@ struct kernel_oplocks_ops {
bool (*set_oplock)(struct kernel_oplocks *ctx,
files_struct *fsp, int oplock_type);
void (*release_oplock)(struct kernel_oplocks *ctx,
- files_struct *fsp);
+ files_struct *fsp, int oplock_type);
};
#include "smb_macros.h"
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index 3dac674c17..0945ac6677 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -91,7 +91,7 @@ void release_file_oplock(files_struct *fsp)
if ((fsp->oplock_type != NO_OPLOCK) &&
(fsp->oplock_type != FAKE_LEVEL_II_OPLOCK) &&
koplocks) {
- koplocks->ops->release_oplock(koplocks, fsp);
+ koplocks->ops->release_oplock(koplocks, fsp, NO_OPLOCK);
}
if (fsp->oplock_type == LEVEL_II_OPLOCK) {
@@ -123,7 +123,7 @@ void release_file_oplock(files_struct *fsp)
static void downgrade_file_oplock(files_struct *fsp)
{
if (koplocks) {
- koplocks->ops->release_oplock(koplocks, fsp);
+ koplocks->ops->release_oplock(koplocks, fsp, LEVEL_II_OPLOCK);
}
fsp->oplock_type = LEVEL_II_OPLOCK;
exclusive_oplocks_open--;
diff --git a/source3/smbd/oplock_irix.c b/source3/smbd/oplock_irix.c
index d7f45e67de..23b2fa9081 100644
--- a/source3/smbd/oplock_irix.c
+++ b/source3/smbd/oplock_irix.c
@@ -222,7 +222,7 @@ static bool irix_set_kernel_oplock(struct kernel_oplocks *_ctx,
****************************************************************************/
static void irix_release_kernel_oplock(struct kernel_oplocks *_ctx,
- files_struct *fsp)
+ files_struct *fsp, int oplock_type)
{
if (DEBUGLVL(10)) {
/*
diff --git a/source3/smbd/oplock_linux.c b/source3/smbd/oplock_linux.c
index 51cce0ed48..5840ff0851 100644
--- a/source3/smbd/oplock_linux.c
+++ b/source3/smbd/oplock_linux.c
@@ -130,7 +130,7 @@ static bool linux_set_kernel_oplock(struct kernel_oplocks *ctx,
****************************************************************************/
static void linux_release_kernel_oplock(struct kernel_oplocks *ctx,
- files_struct *fsp)
+ files_struct *fsp, int oplock_type)
{
if (DEBUGLVL(10)) {
/*