linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [rfc][patch] fs: introduce iget, mark igrab as must_check
@ 2010-03-17 13:11 Nick Piggin
  2010-03-20 20:13 ` Brad Boyer
  0 siblings, 1 reply; 5+ messages in thread
From: Nick Piggin @ 2010-03-17 13:11 UTC (permalink / raw)
  To: linux-fsdevel

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.

Index: linux-2.6/fs/inode.c
===================================================================
--- linux-2.6.orig/fs/inode.c
+++ linux-2.6/fs/inode.c
@@ -296,6 +296,15 @@ void __iget(struct inode *inode)
 	inodes_stat.nr_unused--;
 }
 
+void iget(struct inode *inode)
+{
+	spin_lock(&inode_lock);
+	__iget(inode);
+	spin_unlock(&inode_lock);
+	BUG_ON(inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE));
+}
+EXPORT_SYMBOL(iget);
+
 /**
  * clear_inode - clear an inode
  * @inode: inode to clear
Index: linux-2.6/include/linux/fs.h
===================================================================
--- linux-2.6.orig/include/linux/fs.h
+++ linux-2.6/include/linux/fs.h
@@ -2146,7 +2146,7 @@ extern int inode_init_always(struct supe
 extern void inode_init_once(struct inode *);
 extern void inode_add_to_lists(struct super_block *, struct inode *);
 extern void iput(struct inode *);
-extern struct inode * igrab(struct inode *);
+extern struct inode * __must_check igrab(struct inode *);
 extern ino_t iunique(struct super_block *, ino_t);
 extern int inode_needs_sync(struct inode *inode);
 extern void generic_delete_inode(struct inode *inode);
@@ -2166,6 +2166,7 @@ extern int insert_inode_locked4(struct i
 extern int insert_inode_locked(struct inode *);
 extern void unlock_new_inode(struct inode *);
 
+extern void iget(struct inode * inode);
 extern void __iget(struct inode * inode);
 extern void iget_failed(struct inode *);
 extern void clear_inode(struct inode *);

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2010-03-24 22:02 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 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).