Print this page
NEX-1643 dtrace provider for smbsrv
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
NEX-6041 Should pass the smbtorture lock tests
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>

*** 19,28 **** --- 19,29 ---- * CDDL HEADER END */ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. All rights reserved. */ /* * SMB: unlock_byte_range *
*** 54,78 **** #include <smbsrv/smb_kproto.h> smb_sdrc_t smb_pre_unlock_byte_range(smb_request_t *sr) { ! DTRACE_SMB_1(op__UnlockByteRange__start, smb_request_t *, sr); return (SDRC_SUCCESS); } void smb_post_unlock_byte_range(smb_request_t *sr) { ! DTRACE_SMB_1(op__UnlockByteRange__done, smb_request_t *, sr); } smb_sdrc_t smb_com_unlock_byte_range(smb_request_t *sr) { uint32_t Length; uint32_t Offset; DWORD result; if (smbsr_decode_vwv(sr, "wll", &sr->smb_fid, &Length, &Offset) != 0) return (SDRC_ERROR); --- 55,80 ---- #include <smbsrv/smb_kproto.h> smb_sdrc_t smb_pre_unlock_byte_range(smb_request_t *sr) { ! DTRACE_SMB_START(op__UnlockByteRange, smb_request_t *, sr); return (SDRC_SUCCESS); } void smb_post_unlock_byte_range(smb_request_t *sr) { ! DTRACE_SMB_DONE(op__UnlockByteRange, smb_request_t *, sr); } smb_sdrc_t smb_com_unlock_byte_range(smb_request_t *sr) { uint32_t Length; uint32_t Offset; + uint32_t lk_pid; DWORD result; if (smbsr_decode_vwv(sr, "wll", &sr->smb_fid, &Length, &Offset) != 0) return (SDRC_ERROR);
*** 80,91 **** if (sr->fid_ofile == NULL) { smbsr_error(sr, NT_STATUS_INVALID_HANDLE, ERRDOS, ERRbadfid); return (SDRC_ERROR); } ! result = smb_unlock_range(sr, sr->fid_ofile->f_node, ! (u_offset_t)Offset, (uint64_t)Length); if (result != NT_STATUS_SUCCESS) { smbsr_error(sr, NT_STATUS_RANGE_NOT_LOCKED, ERRDOS, ERROR_NOT_LOCKED); return (SDRC_ERROR); } --- 82,96 ---- if (sr->fid_ofile == NULL) { smbsr_error(sr, NT_STATUS_INVALID_HANDLE, ERRDOS, ERRbadfid); return (SDRC_ERROR); } ! /* Note: SMB1 locking uses 16-bit PIDs. */ ! lk_pid = sr->smb_pid & 0xFFFF; ! ! result = smb_unlock_range(sr, (uint64_t)Offset, (uint64_t)Length, ! lk_pid); if (result != NT_STATUS_SUCCESS) { smbsr_error(sr, NT_STATUS_RANGE_NOT_LOCKED, ERRDOS, ERROR_NOT_LOCKED); return (SDRC_ERROR); }