| From e19d8dd694d261ac26adb2a26121a37c107c81ad Mon Sep 17 00:00:00 2001 |
| From: Wang Zhaolong <wangzhaolong@huaweicloud.com> |
| Date: Fri, 1 Aug 2025 17:07:24 +0800 |
| Subject: smb: client: remove redundant lstrp update in negotiate protocol |
| |
| From: Wang Zhaolong <wangzhaolong@huaweicloud.com> |
| |
| commit e19d8dd694d261ac26adb2a26121a37c107c81ad upstream. |
| |
| Commit 34331d7beed7 ("smb: client: fix first command failure during |
| re-negotiation") addressed a race condition by updating lstrp before |
| entering negotiate state. However, this approach may have some unintended |
| side effects. |
| |
| The lstrp field is documented as "when we got last response from this |
| server", and updating it before actually receiving a server response |
| could potentially affect other mechanisms that rely on this timestamp. |
| For example, the SMB echo detection logic also uses lstrp as a reference |
| point. In scenarios with frequent user operations during reconnect states, |
| the repeated calls to cifs_negotiate_protocol() might continuously |
| update lstrp, which could interfere with the echo detection timing. |
| |
| Additionally, commit 266b5d02e14f ("smb: client: fix race condition in |
| negotiate timeout by using more precise timing") introduced a dedicated |
| neg_start field specifically for tracking negotiate start time. This |
| provides a more precise solution for the original race condition while |
| preserving the intended semantics of lstrp. |
| |
| Since the race condition is now properly handled by the neg_start |
| mechanism, the lstrp update in cifs_negotiate_protocol() is no longer |
| necessary and can be safely removed. |
| |
| Fixes: 266b5d02e14f ("smb: client: fix race condition in negotiate timeout by using more precise timing") |
| Cc: stable@vger.kernel.org |
| Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.org> |
| Signed-off-by: Wang Zhaolong <wangzhaolong@huaweicloud.com> |
| Signed-off-by: Steve French <stfrench@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/smb/client/connect.c | 1 - |
| 1 file changed, 1 deletion(-) |
| |
| --- a/fs/smb/client/connect.c |
| +++ b/fs/smb/client/connect.c |
| @@ -4217,7 +4217,6 @@ retry: |
| return 0; |
| } |
| |
| - server->lstrp = jiffies; |
| server->tcpStatus = CifsInNegotiate; |
| server->neg_start = jiffies; |
| spin_unlock(&server->srv_lock); |