Messages in this thread | | | Date | Thu, 21 Oct 2010 21:07:06 +1100 | From | Nick Piggin <> | Subject | Re: [PATCH 04/21] fs: Implement lazy LRU updates for inodes |
| |
On Thu, Oct 21, 2010 at 11:49:29AM +1100, Dave Chinner wrote: > } else { > /* > - * The inode is clean, unused > + * The inode is clean. If it is unused, then make sure > + * that it is put on the LRU correctly as iput_final() > + * does not move dirty inodes to the LRU and dirty > + * inodes are removed from the LRU during scanning. > */ > - list_move(&inode->i_list, &inode_unused); > + list_del_init(&inode->i_list); > + if (!atomic_read(&inode->i_count)) > + inode_lru_list_add(inode);
This "optimisation" is surely wrong. How could we have no reference on the inode at this point?
> -static int can_unuse(struct inode *inode) > -{ > - if (inode->i_state) > - return 0; > - if (inode_has_buffers(inode)) > - return 0; > - if (atomic_read(&inode->i_count)) > - return 0; > - if (inode->i_data.nrpages) > - return 0; > - return 1; > -}
Avoiding the reclaim optimisation? As I said, I noticed some increased scanning in heavy reclaim from removing this.
| |