summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2012-06-08 17:47:31 +0200
committerMichael Adam <obnox@samba.org>2012-06-08 23:20:20 +0200
commit8a338c65a1824ae8a93bef7bc8fac65684c285c8 (patch)
tree7aa6ee3b1ae97a50cd2bf84029539d3a28e009d9 /source3/smbd
parent088ca00b926894575e75a03756642b9726f421d7 (diff)
downloadsamba-8a338c65a1824ae8a93bef7bc8fac65684c285c8.tar.gz
samba-8a338c65a1824ae8a93bef7bc8fac65684c285c8.tar.bz2
samba-8a338c65a1824ae8a93bef7bc8fac65684c285c8.zip
s3:smbd: change set_file_oplock() to return NTSTATUS
Pair-Programmed-With: Volker Lendecke <vl@samba.org> Pair-Programmed-With: Stefan Metzmacher <metze@samba.org> Autobuild-User(master): Michael Adam <obnox@samba.org> Autobuild-Date(master): Fri Jun 8 23:20:20 CEST 2012 on sn-devel-104
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/open.c3
-rw-r--r--source3/smbd/oplock.c11
-rw-r--r--source3/smbd/proto.h2
3 files changed, 9 insertions, 7 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 7708833f97..4581553be2 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -2408,7 +2408,8 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
* file structs.
*/
- if (!set_file_oplock(fsp, fsp->oplock_type)) {
+ status = set_file_oplock(fsp, fsp->oplock_type);
+ if (!NT_STATUS_IS_OK(status)) {
/*
* Could not get the kernel oplock or there are byte-range
* locks on the file.
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index 19886fc79d..835ea366f9 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -51,7 +51,7 @@ void break_kernel_oplock(struct messaging_context *msg_ctx, files_struct *fsp)
if oplock set.
****************************************************************************/
-bool set_file_oplock(files_struct *fsp, int oplock_type)
+NTSTATUS set_file_oplock(files_struct *fsp, int oplock_type)
{
struct smbd_server_connection *sconn = fsp->conn->sconn;
struct kernel_oplocks *koplocks = sconn->oplocks.kernel_ops;
@@ -62,15 +62,16 @@ bool set_file_oplock(files_struct *fsp, int oplock_type)
!(koplocks->flags & KOPLOCKS_LEVEL2_SUPPORTED)) {
DEBUG(10, ("Refusing level2 oplock, kernel oplocks "
"don't support them\n"));
- return false;
+ return NT_STATUS_NOT_SUPPORTED;
}
}
if ((fsp->oplock_type != NO_OPLOCK) &&
(fsp->oplock_type != FAKE_LEVEL_II_OPLOCK) &&
use_kernel &&
- !koplocks->ops->set_oplock(koplocks, fsp, oplock_type)) {
- return False;
+ !koplocks->ops->set_oplock(koplocks, fsp, oplock_type))
+ {
+ return map_nt_error_from_unix(errno);
}
fsp->oplock_type = oplock_type;
@@ -87,7 +88,7 @@ bool set_file_oplock(files_struct *fsp, int oplock_type)
fsp->fh->gen_id, (int)fsp->open_time.tv_sec,
(int)fsp->open_time.tv_usec ));
- return True;
+ return NT_STATUS_OK;
}
/****************************************************************************
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index b527d208b6..d81feef073 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -654,7 +654,7 @@ NTSTATUS get_relative_fid_filename(connection_struct *conn,
/* The following definitions come from smbd/oplock.c */
void break_kernel_oplock(struct messaging_context *msg_ctx, files_struct *fsp);
-bool set_file_oplock(files_struct *fsp, int oplock_type);
+NTSTATUS set_file_oplock(files_struct *fsp, int oplock_type);
void release_file_oplock(files_struct *fsp);
bool remove_oplock(files_struct *fsp);
bool downgrade_oplock(files_struct *fsp);