problem with kthread changes that went into cifs_demultiplex_thread

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

 



In working on the smb2 client implementation, I noticed that there is
a problem with the revised kthread logic which takes down cifsd
(cifs_demultiplex_thread) on umount or on abnormal socket termination
during protocol negotiation.    I noticed this while looking at SMB2
since the Samba 4 SMB2 server was not handling the new SMB2 Negotiate
protocol request (and unlike Windows Server 2008) and was closing the
tcp session immediately after receiving the negprot request from the
client.  An unexpected error on negprot which causes the TCP session
to close will cause cifsd to exit, but now  this blocks forever at
kthread_should_stop just after the main loop in
cifs_demultiplex_thread.    The task doing mount is blocked in
wait_event on the response_q but will never be woken up by cifsd (even
though it would timeout if some one did wake it up once the 15 second
timeout was expired).   umount will never call kthread_stop because
mount never succeeded - we do not have a tree connection yet (so tcon
is null and we can't get to tcon->ses->server) and the failed mount
won't call kthread_stop because it is stuck in wait_event with no one
to wake up response_q.

Adding a call to wake_up_all(&server->response_q) right after we set
server->tcpStatus = CifsExiting at the end of the loop in
cifs_demultiplex_thread but before we wait for kthread_stop works in
my testing.

-- 
Thanks,

Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux