Re: [PATCH 1/2] cifs: store pointer to master tlink in superblock

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Oct 28, 2010 at 11:50 AM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
> On Thu, 28 Oct 2010 12:23:25 -0400
> Jeff Layton <jlayton@xxxxxxxxxx> wrote:
>
>> On Thu, 28 Oct 2010 10:06:05 -0500
>> Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx> wrote:
>>
>> > On Thu, Oct 28, 2010 at 6:33 AM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
>> > > 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@xxxxxxxxxx>
>> > > ---
>> > >  fs/cifs/cifs_fs_sb.h |    2 +-
>> > >  fs/cifs/connect.c    |   18 +++---------------
>> > >  2 files changed, 4 insertions(+), 16 deletions(-)
>> > >
>> > > diff --git a/fs/cifs/cifs_fs_sb.h b/fs/cifs/cifs_fs_sb.h
>> > > index 525ba59..79576da 100644
>> > > --- a/fs/cifs/cifs_fs_sb.h
>> > > +++ b/fs/cifs/cifs_fs_sb.h
>> > > @@ -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;
>> > > diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
>> > > index 469c3dd..364eb96 100644
>> > > --- a/fs/cifs/connect.c
>> > > +++ b/fs/cifs/connect.c
>> > > @@ -2917,11 +2917,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);
>> > >
>> > > @@ -3275,19 +3275,7 @@ out:
>> > >  static 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;
>> >
>> > Wondering whether we need a function just to return master_tlink
>> > within a cifs_sb.
>> > Could the caller(s) of cifs_sb_master_tlink() access master_tlink directly?
>> >
>>
>> Sure, but accessor functions are generally a good thing. It insulates
>> the callers from needing to know anything about the underlying data
>> structure.
>>
>
> What may make some sense however is turning this function into a static
> inline or macro. Thoughts?
>
> --
> Jeff Layton <jlayton@xxxxxxxxxx>
>

I think inline function would be my preferred choice.
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux