Public bug reported:
#Summary
The cifs kernel module currently ignores the nt_status USER_SESSION_DELETED
PDUs sent to it from remote SMB2+ peers and holds onto clearly dead SMB2+
sessions as a result.
This is causing issues, as it appears that the kernel only reconnects
after a delay period, during which time all IO to that network share
(with that session id) results in an I/O error for the user; all the
while the kernel is repeatedly resubmitting the requests in the
background with the server just responding to each of them with yet more
USER_SESSION_DELETED packets.
This is contrasting to the behaviour on Windows clients - whereby if the
response the client gets is USER_SESSION_DELETED, it drops that session
and reconnects - transparently to the user.
This causes massive issues multiuser mounts (as is the case for me), as
if a users SMB session is deleted by the server for any reason, that
user essentially loses all access to that share for extended periods,
until the cifs module sees fit to treat that session as dead and
renegotiate or an admin intervenes.
# Reproducing
Reproducing the issue is easily done, establish an SMB2+ mount to a Windows
Server machine, open any directory on client to establish a session, then
simply terminate that SMB session from the servers MMC console, if you then try
and run any queries against that mountpoint on the client you will just end up
with a string of I/O errors because its trying to use a session id which is
dead.
For reference I'm testing using the following mount options:
vers=3.02,multiuser,sec=ntlmsspi,file_mode=0750,dir_mode=0755,cache=none,credentials=/etc/smb.credentials.conf
# Affects
This affects all kernel releases that I've tested(including the kernel
mainline), and hence I've reported it upstream, however I'm recording it here
as well for reference purposes.
## Additional Reference Info
Current Version Sig: Ubuntu 4.4.0-78.99-generic 4.4.62
** Affects: linux
Importance: Unknown
Status: Unknown
** Affects: linux (Ubuntu)
Importance: Undecided
Status: New
** Attachment added: "Current lspci"
https://bugs.launchpad.net/bugs/1707167/+attachment/4922945/+files/lspci-vnvn.log
** Bug watch added: Linux Kernel Bug Tracker #195817
https://bugzilla.kernel.org/show_bug.cgi?id=195817
** Also affects: linux via
https://bugzilla.kernel.org/show_bug.cgi?id=195817
Importance: Unknown
Status: Unknown
** Summary changed:
- CIFS: Kernel ignores USER_SESSION_DELETED PDU and holds onto dead sessions.
+ Kernel CIFS Module ignores USER_SESSION_DELETED PDUs and holds onto dead
sessions.
--
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1707167
Title:
Kernel CIFS Module ignores USER_SESSION_DELETED PDUs and holds onto
dead sessions.
Status in Linux:
Unknown
Status in linux package in Ubuntu:
New
Bug description:
#Summary
The cifs kernel module currently ignores the nt_status USER_SESSION_DELETED
PDUs sent to it from remote SMB2+ peers and holds onto clearly dead SMB2+
sessions as a result.
This is causing issues, as it appears that the kernel only reconnects
after a delay period, during which time all IO to that network share
(with that session id) results in an I/O error for the user; all the
while the kernel is repeatedly resubmitting the requests in the
background with the server just responding to each of them with yet
more USER_SESSION_DELETED packets.
This is contrasting to the behaviour on Windows clients - whereby if
the response the client gets is USER_SESSION_DELETED, it drops that
session and reconnects - transparently to the user.
This causes massive issues multiuser mounts (as is the case for me),
as if a users SMB session is deleted by the server for any reason,
that user essentially loses all access to that share for extended
periods, until the cifs module sees fit to treat that session as dead
and renegotiate or an admin intervenes.
# Reproducing
Reproducing the issue is easily done, establish an SMB2+ mount to a Windows
Server machine, open any directory on client to establish a session, then
simply terminate that SMB session from the servers MMC console, if you then try
and run any queries against that mountpoint on the client you will just end up
with a string of I/O errors because its trying to use a session id which is
dead.
For reference I'm testing using the following mount options:
vers=3.02,multiuser,sec=ntlmsspi,file_mode=0750,dir_mode=0755,cache=none,credentials=/etc/smb.credentials.conf
# Affects
This affects all kernel releases that I've tested(including the kernel
mainline), and hence I've reported it upstream, however I'm recording it here
as well for reference purposes.
## Additional Reference Info
Current Version Sig: Ubuntu 4.4.0-78.99-generic 4.4.62
To manage notifications about this bug go to:
https://bugs.launchpad.net/linux/+bug/1707167/+subscriptions
--
Mailing list: https://launchpad.net/~kernel-packages
Post to : [email protected]
Unsubscribe : https://launchpad.net/~kernel-packages
More help : https://help.launchpad.net/ListHelp