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>
This commit is contained in:
Steve French 2014-10-06 01:01:03 -05:00
parent 2baa268253
commit b5b374eab1
1 changed files with 10 additions and 3 deletions

View File

@ -960,11 +960,18 @@ struct inode *cifs_root_iget(struct super_block *sb)
struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb); struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
xid = get_xid(); xid = get_xid();
if (tcon->unix_ext) if (tcon->unix_ext) {
rc = cifs_get_inode_info_unix(&inode, "", sb, xid); rc = cifs_get_inode_info_unix(&inode, "", sb, xid);
else /* some servers mistakenly claim POSIX support */
rc = cifs_get_inode_info(&inode, "", NULL, sb, xid, NULL); if (rc != -EOPNOTSUPP)
goto iget_no_retry;
cifs_dbg(VFS, "server does not support POSIX extensions");
tcon->unix_ext = false;
}
rc = cifs_get_inode_info(&inode, "", NULL, sb, xid, NULL);
iget_no_retry:
if (!inode) { if (!inode) {
inode = ERR_PTR(rc); inode = ERR_PTR(rc);
goto out; goto out;