diff options
author | Stefan Metzmacher <metze@samba.org> | 2008-04-17 03:54:26 +0200 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2008-04-17 03:54:26 +0200 |
commit | baad7a7e56e2b0f24885e01672cd9bdc6667a6a8 (patch) | |
tree | 0ccc0fe29b88936440a768ad55f0ab6fd1f8eb40 | |
parent | 8d6af0a8ad691db62c9540961db1b6d5f68c1616 (diff) | |
download | samba-baad7a7e56e2b0f24885e01672cd9bdc6667a6a8.tar.gz samba-baad7a7e56e2b0f24885e01672cd9bdc6667a6a8.tar.bz2 samba-baad7a7e56e2b0f24885e01672cd9bdc6667a6a8.zip |
ntvfs_generic: map SMB2 oplock levels to the generic ones
metze
(This used to be commit 9013748273378f88bfc66d3583814f0fee67c40f)
-rw-r--r-- | source4/ntvfs/ntvfs_generic.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/source4/ntvfs/ntvfs_generic.c b/source4/ntvfs/ntvfs_generic.c index fee3269eaf..5d4bbf388c 100644 --- a/source4/ntvfs/ntvfs_generic.c +++ b/source4/ntvfs/ntvfs_generic.c @@ -208,7 +208,21 @@ static NTSTATUS ntvfs_map_open_finish(struct ntvfs_module_context *ntvfs, case RAW_OPEN_SMB2: io->smb2.out.file.ntvfs = io2->generic.out.file.ntvfs; - io->smb2.out.oplock_level = 0; + switch (io2->generic.out.oplock_level) { + case OPLOCK_BATCH: + io->smb2.out.oplock_level = SMB2_OPLOCK_LEVEL_BATCH; + break; + case OPLOCK_EXCLUSIVE: + io->smb2.out.oplock_level = SMB2_OPLOCK_LEVEL_EXCLUSIVE; + break; + case OPLOCK_LEVEL_II: + io->smb2.out.oplock_level = SMB2_OPLOCK_LEVEL_II; + break; + default: + io->smb2.out.oplock_level = SMB2_OPLOCK_LEVEL_NONE; + break; + } + io->smb2.out.reserved = 0; io->smb2.out.create_action = io2->generic.out.create_action; io->smb2.out.create_time = io2->generic.out.create_time; io->smb2.out.access_time = io2->generic.out.access_time; @@ -484,7 +498,18 @@ NTSTATUS ntvfs_map_open(struct ntvfs_module_context *ntvfs, status = ntvfs->ops->open(ntvfs, req, io2); break; case RAW_OPEN_SMB2: - io2->generic.in.flags = 0; + switch (io->smb2.in.oplock_level) { + case SMB2_OPLOCK_LEVEL_BATCH: + io2->generic.in.flags = NTCREATEX_FLAGS_REQUEST_BATCH_OPLOCK | + NTCREATEX_FLAGS_REQUEST_OPLOCK; + break; + case SMB2_OPLOCK_LEVEL_EXCLUSIVE: + io2->generic.in.flags = NTCREATEX_FLAGS_REQUEST_OPLOCK; + break; + default: + io2->generic.in.flags = 0; + break; + } io2->generic.in.root_fid = 0; io2->generic.in.access_mask = io->smb2.in.desired_access; io2->generic.in.alloc_size = 0; |