Print this page
NEX-5665 SMB2 oplock leases
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
NEX-5665 SMB2 oplock leases
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
NEX-1643 dtrace provider for smbsrv
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
NEX-5311 SMB1 Create_Temp should return an untagged ASCII string
Reviewed by: Gordon Ross <gwr@nexenta.com>
SMB-11 SMB2 message parse & dispatch
SMB-12 SMB2 Negotiate Protocol
SMB-13 SMB2 Session Setup
SMB-14 SMB2 Logoff
SMB-15 SMB2 Tree Connect
SMB-16 SMB2 Tree Disconnect
SMB-17 SMB2 Create
SMB-18 SMB2 Close
SMB-19 SMB2 Flush
SMB-20 SMB2 Read
SMB-21 SMB2 Write
SMB-22 SMB2 Lock/Unlock
SMB-23 SMB2 Ioctl
SMB-24 SMB2 Cancel
SMB-25 SMB2 Echo
SMB-26 SMB2 Query Dir
SMB-27 SMB2 Change Notify
SMB-28 SMB2 Query Info
SMB-29 SMB2 Set Info
SMB-30 SMB2 Oplocks
SMB-53 SMB2 Create Context options
(SMB2 code review cleanup 1, 2, 3)

*** 18,28 **** * * CDDL HEADER END */ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2013 Nexenta Systems, Inc. All rights reserved. */ #include <smbsrv/smb_kproto.h> #define SMB_CREATE_NAMEBUF_SZ 16 --- 18,28 ---- * * CDDL HEADER END */ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2017 Nexenta Systems, Inc. All rights reserved. */ #include <smbsrv/smb_kproto.h> #define SMB_CREATE_NAMEBUF_SZ 16
*** 45,64 **** rc = smbsr_decode_data(sr, "%S", sr, &op->fqi.fq_path.pn_path); op->create_disposition = FILE_OVERWRITE_IF; op->create_options = FILE_NON_DIRECTORY_FILE; ! DTRACE_SMB_2(op__Create__start, smb_request_t *, sr, ! struct open_param *, op); return ((rc == 0) ? SDRC_SUCCESS : SDRC_ERROR); } void smb_post_create(smb_request_t *sr) { ! DTRACE_SMB_1(op__Create__done, smb_request_t *, sr); } smb_sdrc_t smb_com_create(smb_request_t *sr) { --- 45,63 ---- rc = smbsr_decode_data(sr, "%S", sr, &op->fqi.fq_path.pn_path); op->create_disposition = FILE_OVERWRITE_IF; op->create_options = FILE_NON_DIRECTORY_FILE; ! DTRACE_SMB_START(op__Create, smb_request_t *, sr); /* arg.open */ return ((rc == 0) ? SDRC_SUCCESS : SDRC_ERROR); } void smb_post_create(smb_request_t *sr) { ! DTRACE_SMB_DONE(op__Create, smb_request_t *, sr); } smb_sdrc_t smb_com_create(smb_request_t *sr) {
*** 87,106 **** if (rc == 0) rc = smbsr_decode_data(sr, "%S", sr, &op->fqi.fq_path.pn_path); op->create_disposition = FILE_CREATE; ! DTRACE_SMB_2(op__CreateNew__start, smb_request_t *, sr, ! struct open_param *, op); return ((rc == 0) ? SDRC_SUCCESS : SDRC_ERROR); } void smb_post_create_new(smb_request_t *sr) { ! DTRACE_SMB_1(op__CreateNew__done, smb_request_t *, sr); } smb_sdrc_t smb_com_create_new(smb_request_t *sr) { --- 86,104 ---- if (rc == 0) rc = smbsr_decode_data(sr, "%S", sr, &op->fqi.fq_path.pn_path); op->create_disposition = FILE_CREATE; ! DTRACE_SMB_START(op__CreateNew, smb_request_t *, sr); /* arg.open */ return ((rc == 0) ? SDRC_SUCCESS : SDRC_ERROR); } void smb_post_create_new(smb_request_t *sr) { ! DTRACE_SMB_DONE(op__CreateNew, smb_request_t *, sr); } smb_sdrc_t smb_com_create_new(smb_request_t *sr) {
*** 130,149 **** if (rc == 0) rc = smbsr_decode_data(sr, "%S", sr, &op->fqi.fq_path.pn_path); op->create_disposition = FILE_CREATE; ! DTRACE_SMB_2(op__CreateTemporary__start, smb_request_t *, sr, ! struct open_param *, op); return ((rc == 0) ? SDRC_SUCCESS : SDRC_ERROR); } void smb_post_create_temporary(smb_request_t *sr) { ! DTRACE_SMB_1(op__CreateTemporary__done, smb_request_t *, sr); } smb_sdrc_t smb_com_create_temporary(smb_request_t *sr) { --- 128,146 ---- if (rc == 0) rc = smbsr_decode_data(sr, "%S", sr, &op->fqi.fq_path.pn_path); op->create_disposition = FILE_CREATE; ! DTRACE_SMB_START(op__CreateTemporary, smb_request_t *, sr); return ((rc == 0) ? SDRC_SUCCESS : SDRC_ERROR); } void smb_post_create_temporary(smb_request_t *sr) { ! DTRACE_SMB_DONE(op__CreateTemporary, smb_request_t *, sr); } smb_sdrc_t smb_com_create_temporary(smb_request_t *sr) {
*** 163,173 **** op->fqi.fq_path.pn_path = buf; if (smb_common_create(sr) != NT_STATUS_SUCCESS) return (SDRC_ERROR); ! if (smbsr_encode_result(sr, 1, VAR_BCC, "bww%S", 1, sr->smb_fid, VAR_BCC, sr, name)) return (SDRC_ERROR); return (SDRC_SUCCESS); } --- 160,170 ---- op->fqi.fq_path.pn_path = buf; if (smb_common_create(sr) != NT_STATUS_SUCCESS) return (SDRC_ERROR); ! if (smbsr_encode_result(sr, 1, VAR_BCC, "bww%s", 1, sr->smb_fid, VAR_BCC, sr, name)) return (SDRC_ERROR); return (SDRC_SUCCESS); }
*** 197,209 **** else op->op_oplock_level = SMB_OPLOCK_EXCLUSIVE; } else { op->op_oplock_level = SMB_OPLOCK_NONE; } - op->op_oplock_levelII = B_FALSE; status = smb_common_open(sr); if (op->op_oplock_level == SMB_OPLOCK_NONE) { sr->smb_flg &= ~(SMB_FLAGS_OPLOCK | SMB_FLAGS_OPLOCK_NOTIFY_ANY); } --- 194,209 ---- else op->op_oplock_level = SMB_OPLOCK_EXCLUSIVE; } else { op->op_oplock_level = SMB_OPLOCK_NONE; } status = smb_common_open(sr); + if (status == 0 && op->op_oplock_level != SMB_OPLOCK_NONE) { + /* Oplock req. in op->op_oplock_level etc. */ + smb1_oplock_acquire(sr, B_FALSE); + } if (op->op_oplock_level == SMB_OPLOCK_NONE) { sr->smb_flg &= ~(SMB_FLAGS_OPLOCK | SMB_FLAGS_OPLOCK_NOTIFY_ANY); }