On Thu 11-06-15 15:41:13, Josef Bacik wrote: > On a box with a lot of ram (148gb) I can make the box softlockup after running > an fs_mark job that creates hundreds of millions of empty files. This is > because we never generate enough memory pressure to keep the number of inodes on > our unused list low, so when we go to unmount we have to evict ~100 million > inodes. This makes one processor a very unhappy person, so add a cond_resched() > in dispose_list() and if we need a resched when processing the s_inodes list do > that and run dispose_list() on what we've currently culled. Thanks, > > Signed-off-by: Josef Bacik <jbacik@xxxxxx> Looks good. You can add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > fs/inode.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/fs/inode.c b/fs/inode.c > index d1e6598..53a1224 100644 > --- a/fs/inode.c > +++ b/fs/inode.c > @@ -574,6 +574,7 @@ static void dispose_list(struct list_head *head) > list_del_init(&inode->i_lru); > > evict(inode); > + cond_resched(); > } > } > > @@ -591,6 +592,7 @@ void evict_inodes(struct super_block *sb) > struct inode *inode, *next; > LIST_HEAD(dispose); > > +again: > spin_lock(&sb->s_inode_list_lock); > list_for_each_entry_safe(inode, next, &sb->s_inodes, i_sb_list) { > if (atomic_read(&inode->i_count)) > @@ -606,6 +608,18 @@ void evict_inodes(struct super_block *sb) > inode_lru_list_del(inode); > spin_unlock(&inode->i_lock); > list_add(&inode->i_lru, &dispose); > + > + /* > + * We can have a ton of inodes to evict at unmount time given > + * enough memory, check to see if we need to go to sleep for a > + * bit so we don't livelock. > + */ > + if (need_resched()) { > + spin_unlock(&sb->s_inode_list_lock); > + cond_resched(); > + dispose_list(&dispose); > + goto again; > + } > } > spin_unlock(&sb->s_inode_list_lock); > > -- > 2.1.0 > -- Jan Kara <jack@xxxxxxx> SUSE Labs, CR -- 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