Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1cc5afab authored by Steve French's avatar Steve French Committed by Greg Kroah-Hartman
Browse files

cifs: fallback to older infolevels on findfirst queryinfo retry



[ Upstream commit 3b7960caceafdfc2cdfe2850487f8d091eb41144 ]

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 3fbf4c0a
Loading
Loading
Loading
Loading
+37 −30
Original line number Diff line number Diff line
@@ -785,7 +785,15 @@ cifs_get_inode_info(struct inode **inode, const char *full_path,
		}

		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;
		else /* no srvino useful for fallback to some netapp */
			srchinf->info_level = SMB_FIND_FILE_DIRECTORY_INFO;

		srchflgs = CIFS_SEARCH_CLOSE_ALWAYS |
				CIFS_SEARCH_CLOSE_AT_END |
@@ -794,8 +802,7 @@ cifs_get_inode_info(struct inode **inode, const char *full_path,
		rc = CIFSFindFirst(xid, tcon, full_path,
			cifs_sb, NULL, srchflgs, srchinf, false);
		if (!rc) {
				data =
				(FILE_ALL_INFO *)srchinf->srch_entries_start;
			data = (FILE_ALL_INFO *)srchinf->srch_entries_start;

			cifs_dir_info_to_fattr(&fattr,
			(FILE_DIRECTORY_INFO *)data, cifs_sb);