mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
cifs: fix reconnect with SMB1 UNIX Extensions
commit a214384ce26b6111ea8c8d58fa82a1ca63996c38 upstream.
When mounting with the SMB1 Unix Extensions (e.g. mounts
to Samba with vers=1.0), reconnects no longer reset the
Unix Extensions (SetFSInfo SET_FILE_UNIX_BASIC) after tcon so most
operations (e.g. stat, ls, open, statfs) will fail continuously
with:
"Operation not supported"
if the connection ever resets (e.g. due to brief network disconnect)
Cc: stable@vger.kernel.org
Reviewed-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
6018971710
commit
85b18ac538
@@ -3975,6 +3975,7 @@ error:
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
|
||||
/*
|
||||
* Issue a TREE_CONNECT request.
|
||||
*/
|
||||
@@ -4096,11 +4097,25 @@ CIFSTCon(const unsigned int xid, struct cifs_ses *ses,
|
||||
else
|
||||
tcon->Flags = 0;
|
||||
cifs_dbg(FYI, "Tcon flags: 0x%x\n", tcon->Flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* reset_cifs_unix_caps calls QFSInfo which requires
|
||||
* need_reconnect to be false, but we would not need to call
|
||||
* reset_caps if this were not a reconnect case so must check
|
||||
* need_reconnect flag here. The caller will also clear
|
||||
* need_reconnect when tcon was successful but needed to be
|
||||
* cleared earlier in the case of unix extensions reconnect
|
||||
*/
|
||||
if (tcon->need_reconnect && tcon->unix_ext) {
|
||||
cifs_dbg(FYI, "resetting caps for %s\n", tcon->tree_name);
|
||||
tcon->need_reconnect = false;
|
||||
reset_cifs_unix_caps(xid, tcon, NULL, NULL);
|
||||
}
|
||||
}
|
||||
cifs_buf_release(smb_buffer);
|
||||
return rc;
|
||||
}
|
||||
#endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
|
||||
|
||||
static void delayed_free(struct rcu_head *p)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user