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. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html