diff options
-rw-r--r-- | source3/smbd/open.c | 3 | ||||
-rw-r--r-- | source3/smbd/oplock.c | 11 | ||||
-rw-r--r-- | source3/smbd/proto.h | 2 |
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); |