]> git.hungrycats.org Git - linux/commitdiff
fs: don't softlockup when evicting inodes
authorJosef Bacik <jbacik@fb.com>
Thu, 18 Dec 2014 16:34:23 +0000 (11:34 -0500)
committerJosef Bacik <jbacik@fb.com>
Fri, 19 Dec 2014 15:32:25 +0000 (10:32 -0500)
If I run an fs_mark job that creates millions of empty files and then
immediately unmount the file system I will get a softlockup during unmount.
This box has ~140gb of RAM so we never hit sufficient memory pressure to evict
enough inodes during the runtime of the benchmark, which means I see around 80
million inodes being evicted at unmount time.  With this patch my box no longer
softlocks up.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
fs/inode.c

index ad60555b4768fa012dfeeba0661de6f7fc9addec..f266765674858326369f2cf6191a7560bb2a1cff 100644 (file)
@@ -581,6 +581,7 @@ static void dispose_list(struct list_head *head)
                list_del_init(&inode->i_lru);
 
                evict(inode);
+               cond_resched();
        }
 }
 
@@ -613,6 +614,7 @@ void evict_inodes(struct super_block *sb)
                inode_lru_list_del(inode);
                spin_unlock(&inode->i_lock);
                list_add(&inode->i_lru, &dispose);
+               cond_resched_lock(&inode_sb_list_lock);
        }
        spin_unlock(&inode_sb_list_lock);