Commit 413e661c authored by Jeff Layton's avatar Jeff Layton Committed by Steve French
Browse files

cifs: store pointer to master tlink in superblock (try #2)



This is the second version of this patch, the only difference between
it and the first one is that this explicitly makes cifs_sb_master_tlink
a static inline.

Instead of keeping a tag on the master tlink in the tree, just keep a
pointer to the master in the superblock. That eliminates the need for
using the radix tree to look up a tagged entry.

Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent df098db1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -43,8 +43,8 @@

struct cifs_sb_info {
	struct radix_tree_root tlink_tree;
#define CIFS_TLINK_MASTER_TAG		0	/* is "master" (mount) tcon */
	spinlock_t tlink_tree_lock;
	struct tcon_link *master_tlink;
	struct nls_table *local_nls;
	unsigned int rsize;
	unsigned int wsize;
+4 −16
Original line number Diff line number Diff line
@@ -2914,11 +2914,11 @@ remote_path_check:

	spin_lock(&cifs_sb->tlink_tree_lock);
	radix_tree_insert(&cifs_sb->tlink_tree, pSesInfo->linux_uid, tlink);
	radix_tree_tag_set(&cifs_sb->tlink_tree, pSesInfo->linux_uid,
			   CIFS_TLINK_MASTER_TAG);
	spin_unlock(&cifs_sb->tlink_tree_lock);
	radix_tree_preload_end();

	cifs_sb->master_tlink = tlink;

	queue_delayed_work(system_nrt_wq, &cifs_sb->prune_tlinks,
				TLINK_IDLE_EXPIRE);

@@ -3271,22 +3271,10 @@ out:
	return tcon;
}

static struct tcon_link *
static inline struct tcon_link *
cifs_sb_master_tlink(struct cifs_sb_info *cifs_sb)
{
	struct tcon_link *tlink;
	unsigned int ret;

	spin_lock(&cifs_sb->tlink_tree_lock);
	ret = radix_tree_gang_lookup_tag(&cifs_sb->tlink_tree, (void **)&tlink,
					0, 1, CIFS_TLINK_MASTER_TAG);
	spin_unlock(&cifs_sb->tlink_tree_lock);

	/* the master tcon should always be present */
	if (ret == 0)
		BUG();

	return tlink;
	return cifs_sb->master_tlink;
}

struct cifsTconInfo *