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: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
df098db12a
commit
413e661c13
|
@ -43,8 +43,8 @@
|
||||||
|
|
||||||
struct cifs_sb_info {
|
struct cifs_sb_info {
|
||||||
struct radix_tree_root tlink_tree;
|
struct radix_tree_root tlink_tree;
|
||||||
#define CIFS_TLINK_MASTER_TAG 0 /* is "master" (mount) tcon */
|
|
||||||
spinlock_t tlink_tree_lock;
|
spinlock_t tlink_tree_lock;
|
||||||
|
struct tcon_link *master_tlink;
|
||||||
struct nls_table *local_nls;
|
struct nls_table *local_nls;
|
||||||
unsigned int rsize;
|
unsigned int rsize;
|
||||||
unsigned int wsize;
|
unsigned int wsize;
|
||||||
|
|
|
@ -2914,11 +2914,11 @@ remote_path_check:
|
||||||
|
|
||||||
spin_lock(&cifs_sb->tlink_tree_lock);
|
spin_lock(&cifs_sb->tlink_tree_lock);
|
||||||
radix_tree_insert(&cifs_sb->tlink_tree, pSesInfo->linux_uid, tlink);
|
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);
|
spin_unlock(&cifs_sb->tlink_tree_lock);
|
||||||
radix_tree_preload_end();
|
radix_tree_preload_end();
|
||||||
|
|
||||||
|
cifs_sb->master_tlink = tlink;
|
||||||
|
|
||||||
queue_delayed_work(system_nrt_wq, &cifs_sb->prune_tlinks,
|
queue_delayed_work(system_nrt_wq, &cifs_sb->prune_tlinks,
|
||||||
TLINK_IDLE_EXPIRE);
|
TLINK_IDLE_EXPIRE);
|
||||||
|
|
||||||
|
@ -3271,22 +3271,10 @@ out:
|
||||||
return tcon;
|
return tcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tcon_link *
|
static inline struct tcon_link *
|
||||||
cifs_sb_master_tlink(struct cifs_sb_info *cifs_sb)
|
cifs_sb_master_tlink(struct cifs_sb_info *cifs_sb)
|
||||||
{
|
{
|
||||||
struct tcon_link *tlink;
|
return cifs_sb->master_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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct cifsTconInfo *
|
struct cifsTconInfo *
|
||||||
|
|
Loading…
Reference in New Issue