cifs: Fix a race condition with cifs_echo_request
authorRonnie Sahlberg <lsahlber@redhat.com>
Fri, 5 Jul 2019 20:52:46 +0000 (06:52 +1000)
committerSteve French <stfrench@microsoft.com>
Mon, 8 Jul 2019 03:37:43 +0000 (22:37 -0500)
commitf2caf901c1b7ce65f9e6aef4217e3241039db768
treec5f38dc1911eb2286937c8137bbec59a08962b32
parent3e2725796cbdfe4efc7eb7b27cacaeac2ddad1a5
cifs: Fix a race condition with cifs_echo_request

There is a race condition with how we send (or supress and don't send)
smb echos that will cause the client to incorrectly think the
server is unresponsive and thus needs to be reconnected.

Summary of the race condition:
 1) Daisy chaining scheduling creates a gap.
 2) If traffic comes unfortunate shortly after
    the last echo, the planned echo is suppressed.
 3) Due to the gap, the next echo transmission is delayed
    until after the timeout, which is set hard to twice
    the echo interval.

This is fixed by changing the timeouts from 2 to three times the echo interval.

Detailed description of the bug: https://lutz.donnerhacke.de/eng/Blog/Groundhog-Day-with-SMB-remount

Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/connect.c