Commit e9603cff authored by Steve French's avatar Steve French Committed by Greg Kroah-Hartman

cifs: fallback to older infolevels on findfirst queryinfo retry

[ Upstream commit 3b7960ca ]

In cases where queryinfo fails, we have cases in cifs (vers=1.0)
where with backupuid mounts we retry the query info with findfirst.
This doesn't work to some NetApp servers which don't support
WindowsXP (and later) infolevel 261 (SMB_FIND_FILE_ID_FULL_DIR_INFO)
so in this case use other info levels (in this case it will usually
be level 257, SMB_FIND_FILE_DIRECTORY_INFO).

(Also fixes some indentation)

See kernel bugzilla 201435
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent fc34758d
...@@ -794,7 +794,15 @@ cifs_get_inode_info(struct inode **inode, const char *full_path, ...@@ -794,7 +794,15 @@ cifs_get_inode_info(struct inode **inode, const char *full_path,
} }
srchinf->endOfSearch = false; srchinf->endOfSearch = false;
if (tcon->unix_ext)
srchinf->info_level = SMB_FIND_FILE_UNIX;
else if ((tcon->ses->capabilities &
tcon->ses->server->vals->cap_nt_find) == 0)
srchinf->info_level = SMB_FIND_FILE_INFO_STANDARD;
else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)
srchinf->info_level = SMB_FIND_FILE_ID_FULL_DIR_INFO; srchinf->info_level = SMB_FIND_FILE_ID_FULL_DIR_INFO;
else /* no srvino useful for fallback to some netapp */
srchinf->info_level = SMB_FIND_FILE_DIRECTORY_INFO;
srchflgs = CIFS_SEARCH_CLOSE_ALWAYS | srchflgs = CIFS_SEARCH_CLOSE_ALWAYS |
CIFS_SEARCH_CLOSE_AT_END | CIFS_SEARCH_CLOSE_AT_END |
...@@ -803,8 +811,7 @@ cifs_get_inode_info(struct inode **inode, const char *full_path, ...@@ -803,8 +811,7 @@ cifs_get_inode_info(struct inode **inode, const char *full_path,
rc = CIFSFindFirst(xid, tcon, full_path, rc = CIFSFindFirst(xid, tcon, full_path,
cifs_sb, NULL, srchflgs, srchinf, false); cifs_sb, NULL, srchflgs, srchinf, false);
if (!rc) { if (!rc) {
data = data = (FILE_ALL_INFO *)srchinf->srch_entries_start;
(FILE_ALL_INFO *)srchinf->srch_entries_start;
cifs_dir_info_to_fattr(&fattr, cifs_dir_info_to_fattr(&fattr,
(FILE_DIRECTORY_INFO *)data, cifs_sb); (FILE_DIRECTORY_INFO *)data, cifs_sb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment