[CIFS] cifs: clarify the meaning of tcpStatus == CifsGood
commitfd88ce9313e9f9d3b56eada7fc76a301828baefd
authorSteve French <sfrench@us.ibm.com>
Tue, 12 Apr 2011 01:01:14 +0000 (12 01:01 +0000)
committerSteve French <sfrench@us.ibm.com>
Tue, 12 Apr 2011 01:01:14 +0000 (12 01:01 +0000)
treeda6f5ec8cbb639b68ed68d22ab3d879b51550f42
parent157c249114508aa71daa308a426e15d81a4eed00
[CIFS] cifs: clarify the meaning of tcpStatus == CifsGood

When the TCP_Server_Info is first allocated and connected, tcpStatus ==
CifsGood means that the NEGOTIATE_PROTOCOL request has completed and the
socket is ready for other calls. cifs_reconnect however sets tcpStatus
to CifsGood as soon as the socket is reconnected and the optional
RFC1001 session setup is done. We have no clear way to tell the
difference between these two states, and we need to know this in order
to know whether we can send an echo or not.

Resolve this by adding a new statusEnum value -- CifsNeedNegotiate. When
the socket has been connected but has not yet had a NEGOTIATE_PROTOCOL
request done, set it to this value. Once the NEGOTIATE is done,
cifs_negotiate_protocol will set tcpStatus to CifsGood.

This also fixes and cleans the logic in cifs_reconnect and
cifs_reconnect_tcon. The old code checked for specific states when what
it really wants to know is whether the state has actually changed from
CifsNeedReconnect.

Reported-and-Tested-by: JG <jg@cms.ac>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/cifsglob.h
fs/cifs/cifssmb.c
fs/cifs/connect.c