Commit 02102744 authored by Steve French's avatar Steve French
Browse files

smb3: do not setup the fscache_super_cookie until fsinfo initialized



We were calling cifs_fscache_get_super_cookie after tcon but before
we queried the info (QFS_Info) we need to initialize the cookie
properly.  Also includes an additional check suggested by Paulo
to make sure we don't initialize super cookie twice.

Suggested-by: default avatarDavid Howells <dhowells@redhat.com>
Reviewed-by: default avatarPaulo Alcantara (SUSE) <pc@cjr.nz>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 7f28af9c
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -2350,8 +2350,6 @@ cifs_get_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx)
	list_add(&tcon->tcon_list, &ses->tcon_list);
	spin_unlock(&cifs_tcp_ses_lock);

	cifs_fscache_get_super_cookie(tcon);

	return tcon;

out_fail:
@@ -3003,6 +3001,12 @@ static int mount_get_conns(struct mount_ctx *mnt_ctx)
				cifs_dbg(VFS, "read only mount of RW share\n");
			/* no need to log a RW mount of a typical RW share */
		}
		/*
		 * The cookie is initialized from volume info returned above.
		 * Inside cifs_fscache_get_super_cookie it checks
		 * that we do not get super cookie twice.
		 */
		cifs_fscache_get_super_cookie(tcon);
	}

	/*
+8 −0
Original line number Diff line number Diff line
@@ -87,6 +87,14 @@ void cifs_fscache_get_super_cookie(struct cifs_tcon *tcon)
	char *sharename;
	struct cifs_fscache_super_auxdata auxdata;

	/*
	 * Check if cookie was already initialized so don't reinitialize it.
	 * In the future, as we integrate with newer fscache features,
	 * we may want to instead add a check if cookie has changed
	 */
	if (tcon->fscache == NULL)
		return;

	sharename = extract_sharename(tcon->treeName);
	if (IS_ERR(sharename)) {
		cifs_dbg(FYI, "%s: couldn't extract sharename\n", __func__);