mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
ksmbd: avoid to send duplicate lease break notifications
This patch fixes generic/011 when enable smb2 leases. if ksmbd sends multiple notifications for a file, cifs increments the reference count of the file but it does not decrement the count by the failure of queue_work. So even if the file is closed, cifs does not send a SMB2_CLOSE request. Cc: stable@vger.kernel.org Signed-off-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
cc00bc83f2
commit
97c2ec6466
@ -613,13 +613,23 @@ static int oplock_break_pending(struct oplock_info *opinfo, int req_op_level)
|
||||
|
||||
if (opinfo->op_state == OPLOCK_CLOSING)
|
||||
return -ENOENT;
|
||||
else if (!opinfo->is_lease && opinfo->level <= req_op_level)
|
||||
return 1;
|
||||
else if (opinfo->level <= req_op_level) {
|
||||
if (opinfo->is_lease &&
|
||||
opinfo->o_lease->state !=
|
||||
(SMB2_LEASE_HANDLE_CACHING_LE |
|
||||
SMB2_LEASE_READ_CACHING_LE))
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!opinfo->is_lease && opinfo->level <= req_op_level) {
|
||||
wake_up_oplock_break(opinfo);
|
||||
return 1;
|
||||
if (opinfo->level <= req_op_level) {
|
||||
if (opinfo->is_lease &&
|
||||
opinfo->o_lease->state !=
|
||||
(SMB2_LEASE_HANDLE_CACHING_LE |
|
||||
SMB2_LEASE_READ_CACHING_LE)) {
|
||||
wake_up_oplock_break(opinfo);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -887,7 +897,6 @@ static int oplock_break(struct oplock_info *brk_opinfo, int req_op_level)
|
||||
struct lease *lease = brk_opinfo->o_lease;
|
||||
|
||||
atomic_inc(&brk_opinfo->breaking_cnt);
|
||||
|
||||
err = oplock_break_pending(brk_opinfo, req_op_level);
|
||||
if (err)
|
||||
return err < 0 ? err : 0;
|
||||
|
Loading…
Reference in New Issue
Block a user