aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/inode.c
diff options
context:
space:
mode:
authorSteve French <smfrench@gmail.com>2014-10-06 02:01:03 -0400
committerSteve French <smfrench@gmail.com>2014-10-16 16:20:20 -0400
commitb5b374eab11ef60d789e28bc36c18e2d08703212 (patch)
treea1cec103a742227ec12ff77b8f38f40cd9af23f6 /fs/cifs/inode.c
parent2baa2682531ff02928e2d3904800696d9e7193db (diff)
Workaround Mac server problem
Mac server returns that they support CIFS Unix Extensions but doesn't actually support QUERY_FILE_UNIX_BASIC so mount fails. Workaround this problem by disabling use of Unix CIFS protocol extensions if server returns an EOPNOTSUPP error on QUERY_FILE_UNIX_BASIC during mount. Signed-off-by: Steve French <smfrench@gmail.com>
Diffstat (limited to 'fs/cifs/inode.c')
-rw-r--r--fs/cifs/inode.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index c23bdec805c5..197cb503d528 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -960,11 +960,18 @@ struct inode *cifs_root_iget(struct super_block *sb)
960 struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb); 960 struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
961 961
962 xid = get_xid(); 962 xid = get_xid();
963 if (tcon->unix_ext) 963 if (tcon->unix_ext) {
964 rc = cifs_get_inode_info_unix(&inode, "", sb, xid); 964 rc = cifs_get_inode_info_unix(&inode, "", sb, xid);
965 else 965 /* some servers mistakenly claim POSIX support */
966 rc = cifs_get_inode_info(&inode, "", NULL, sb, xid, NULL); 966 if (rc != -EOPNOTSUPP)
967 goto iget_no_retry;
968 cifs_dbg(VFS, "server does not support POSIX extensions");
969 tcon->unix_ext = false;
970 }
971
972 rc = cifs_get_inode_info(&inode, "", NULL, sb, xid, NULL);
967 973
974iget_no_retry:
968 if (!inode) { 975 if (!inode) {
969 inode = ERR_PTR(rc); 976 inode = ERR_PTR(rc);
970 goto out; 977 goto out;