Skip to content

Commit

Permalink
cifs: store pointer to master tlink in superblock (try #2)
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jeff Layton authored and Steve French committed Nov 2, 2010
1 parent df098db commit 413e661
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 17 deletions.
2 changes: 1 addition & 1 deletion fs/cifs/cifs_fs_sb.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
20 changes: 4 additions & 16 deletions fs/cifs/connect.c
Original file line number Diff line number Diff line change
Expand Up @@ -2914,11 +2914,11 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,

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);

Expand Down Expand Up @@ -3271,22 +3271,10 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, uid_t fsuid)
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 *
Expand Down

0 comments on commit 413e661

Please sign in to comment.