linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Nick Piggin <npiggin@suse.de>
Cc: Brad Boyer <flar@allandria.com>, linux-fsdevel@vger.kernel.org
Subject: Re: [rfc][patch] fs: introduce iget, mark igrab as must_check
Date: Thu, 25 Mar 2010 09:01:57 +1100	[thread overview]
Message-ID: <20100324220157.GD7671@dastard> (raw)
In-Reply-To: <20100322015755.GD9733@laptop>

On Mon, Mar 22, 2010 at 12:57:56PM +1100, Nick Piggin wrote:
> On Sat, Mar 20, 2010 at 01:13:38PM -0700, Brad Boyer wrote:
> > On Thu, Mar 18, 2010 at 12:11:12AM +1100, Nick Piggin wrote:
> > > I thought I would ask for opinions on this because it can come in handy
> > > to avoid locking to use an iget() rather than igrab() if we do lazy LRU
> > > (like the dcache), then iget() just increments the refcount and doesn't
> > > require any more locking.
> > > 
> > > I thought it might be useful anyway to avoid igrab misuse by
> > > filesystems? So after this patch we should use igrab for when we don't
> > > already have the inode pinned. Introduce iget for when we do.
> > > The interfaces don't change, but __must_check will prompt filesystems to
> > > use the correct API.
> > 
> > I'm not sure if this matters, but I have to say I don't like the name. In
> > particular, iget used to exist and be iget(sb, ino). A lot of the code
> > still has leftovers from this including iget_locked. I'm not sure if
> > there is a more obvious name, especially since __iget is effectively the
> > unlocked version of what you added. It's something to consider if you
> > haven't already.
> 
> Yeah, I can't think of a better name. It would be annoying to introduce
> a worse name because of legacy reasons.
> 
> > 
> > Also, are you really avoiding any locking? It looks the same to me.
> 
> Not in this patch, but I have a patch in my icache scalability series
> (which can be broken out of course) that basically does a "lazy lru"
> for inodes, like we do for dentries now.
> 
> So iget will become basically what dget is now. It would not have to
> check inode state or move it between lists.
> 
> Whether or not we actually do that is another question, but either way
> I think this patch is worthwhile.

I've had a patch hanging around that avoids the inode_lock for igrab
in the case of already pinned inodes. It doesn't address the
__must_check you want to add, though...

Basically, it added an unlocked atomic_inc_not_zero() to igrab()
like so::

 struct inode *igrab(struct inode *inode)
 {
+	if (atomic_inc_not_zero(&inode->i_count))
+		return inode;
+
 	spin_lock(&inode_lock);
 	if (!(inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE)))
 		__iget(inode);

The patch also changed __iget() to use atomic_inc_not_zero()
rather than atomic_read/atomic_inc as well...

Cheers,

Dave,
-- 
Dave Chinner
david@fromorbit.com

      parent reply	other threads:[~2010-03-24 22:02 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-17 13:11 [rfc][patch] fs: introduce iget, mark igrab as must_check Nick Piggin
2010-03-20 20:13 ` Brad Boyer
2010-03-22  1:57   ` Nick Piggin
2010-03-23  6:24     ` Brad Boyer
2010-03-24 22:01     ` Dave Chinner [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100324220157.GD7671@dastard \
    --to=david@fromorbit.com \
    --cc=flar@allandria.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=npiggin@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).