SMB3: drop reference to cfile before sending oplock break
authorBharath SM <bharathsm@microsoft.com>
Mon, 15 May 2023 21:25:12 +0000 (21:25 +0000)
committerSteve French <stfrench@microsoft.com>
Thu, 1 Jun 2023 04:50:10 +0000 (23:50 -0500)
commit897118ac46976870ff4ca6ab1ab2728e06eda980
tree6fae02944b64cdb6103652392a2d58014529cb13
parenta8795d0d3dd5745dd108ae6f2f2ebc951c54f28a
SMB3: drop reference to cfile before sending oplock break

In cifs_oplock_break function we drop reference to a cfile at
the end of function, due to which close command goes on wire
after lease break acknowledgment even if file is already closed
by application but we had deferred the handle close.
If other client with limited file shareaccess waiting on lease
break ack proceeds operation on that file as soon as first client
sends ack, then we may encounter status sharing violation error
because of open handle.
Solution is to put reference to cfile(send close on wire if last ref)
and then send oplock acknowledgment to server.

Fixes: 9e31678fb403 ("SMB3: fix lease break timeout when multiple deferred close handles for the same file.")
Cc: stable@kernel.org
Signed-off-by: Bharath SM <bharathsm@microsoft.com>
Reviewed-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/cifsglob.h
fs/cifs/file.c
fs/cifs/smb1ops.c
fs/cifs/smb2ops.c