Re: [PATCH] smb: client: fix hang in wait_for_response() for negproto

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Steve French <smfrench@xxxxxxxxx> writes:

> when I tried this - it took much longer than expected to time out.

For me the mount process never returns as the server is no longer
responding to any requests and demultiplex thread is unable to detect
server's unresponsiviness, therefore leaving the process stuck in
wait_for_response() by not marking the mid for retry and waking it up.

# ps -e -o stat,pid,comm,cmd |grep ^D
D+       726 mount.cifs      mount.cifs //192.168.2.100/scratch /mnt/1 -o vers=3.1.1,username=testuser,password=xyz,echo_interval=5
# cat /proc/726/stack
[<0>] wait_for_response+0x147/0x1a0 [cifs]
[<0>] compound_send_recv+0x6b4/0x1150 [cifs]
[<0>] cifs_send_recv+0x23/0x30 [cifs]
[<0>] SMB2_negotiate+0x8b0/0x1c10 [cifs]
[<0>] smb2_negotiate+0x52/0x70 [cifs]
[<0>] cifs_negotiate_protocol+0x129/0x1c0 [cifs]
[<0>] cifs_get_smb_ses+0x807/0x1150 [cifs]
[<0>] cifs_mount_get_session+0x8a/0x210 [cifs]
[<0>] dfs_mount_share+0x281/0x1040 [cifs]
[<0>] cifs_mount+0xbd/0x3d0 [cifs]
[<0>] cifs_smb3_do_mount+0x1e2/0xc80 [cifs]
[<0>] smb3_get_tree+0x1bf/0x330 [cifs]
[<0>] vfs_get_tree+0x4a/0x160
[<0>] path_mount+0x3c1/0xfb0
[<0>] __x64_sys_mount+0x1a6/0x1e0
[<0>] do_syscall_64+0xbb/0x1d0
[<0>] entry_SYSCALL_64_after_hwframe+0x77/0x7f

If this happens after mounting the share, either smb2_reconnect_server()
or any subsequent I/O will end up stuck in smb2_reconnect() under
cifs_ses::session_mutex attempting to reconnect the session.  Next I/O
will block indefinitely under cifs_ses::session_mutex as it will need to
reconnect the session as well.

> How long do you expect mount to hang with your patch?

@echo_interval seconds.




[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux