Commit 269f67e1 authored by Ronnie Sahlberg's avatar Ronnie Sahlberg Committed by Steve French
Browse files

cifs: store a pointer to the root dentry in cifs_sb_info once we have completed mounting the share



And use this to only allow to take out a shared handle once the mount has completed and the
sb becomes available.
This will become important in follow up patches where we will start holding a reference to the
directory dentry for the shared handle during the lifetime of the handle.

Signed-off-by: default avatarRonnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 45c0f1aa
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -81,5 +81,9 @@ struct cifs_sb_info {
	 * (cifs_autodisable_serverino) in order to match new mounts.
	 */
	bool mnt_cifs_serverino_autodisabled;
	/*
	 * Available once the mount has completed.
	 */
	struct dentry *root;
};
#endif				/* _CIFS_FS_SB_H */
+9 −0
Original line number Diff line number Diff line
@@ -257,6 +257,12 @@ cifs_read_super(struct super_block *sb)
static void cifs_kill_sb(struct super_block *sb)
{
	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);

	if (cifs_sb->root) {
		dput(cifs_sb->root);
		cifs_sb->root = NULL;
	}

	kill_anon_super(sb);
	cifs_umount(cifs_sb);
}
@@ -886,6 +892,9 @@ cifs_smb3_do_mount(struct file_system_type *fs_type,
	if (IS_ERR(root))
		goto out_super;

	if (cifs_sb)
		cifs_sb->root = dget(root);

	cifs_dbg(FYI, "dentry root is: %p\n", root);
	return root;

+4 −1
Original line number Diff line number Diff line
@@ -751,8 +751,11 @@ int open_cached_dir(unsigned int xid, struct cifs_tcon *tcon,
	if (tcon->nohandlecache)
		return -ENOTSUPP;

	if (cifs_sb->root == NULL)
		return -ENOENT;

	if (strlen(path))
		return -ENOTSUPP;
		return -ENOENT;

	mutex_lock(&tcon->crfid.fid_mutex);
	if (tcon->crfid.is_valid) {