Re: [PATCH 05/18] fs: inode split IO and LRU lists

Christoph Hellwig
2010-10-08T07:14:18Z

On Fri, Oct 08, 2010 at 04:21:19PM +1100, Dave Chinner wrote:
> From: Nick Piggin <npiggin@suse.de>
>
> The use of the same inode list structure (inode->i_list) for two
> different list constructs with different lifecycles and purposes
> makes it impossible to separate the locking of the different
> operations. Therefore, to enable the separation of the locking of
> the writeback and reclaim lists, split the inode->i_list into two
> separate lists dedicated to their specific tracking functions.

> @@ -410,7 +410,11 @@ writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
> redirty_tail(inode);
> } else {
> /* The inode is clean */
> - list_move(&inode->i_list, &inode_unused);
> + list_del_init(&inode->i_io);
> + if (list_empty(&inode->i_lru)) {
> + list_add(&inode->i_lru, &inode_unused);
> + percpu_counter_inc(&nr_inodes_unused);
> + }

This looks like it belongs into the earlier patch. Also instead of
making nr_inodes_unused non-static a helper to manipulate it might
be a better idea.