diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-02-11 03:25:01 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-02-11 03:25:01 -0500 |
commit | 3b6effbc3805a4fd282549d6283f115c47b12a7e (patch) | |
tree | d7c7f818ffa5797c648ce3ea8b985b515e9ff816 /fs/drop_caches.c | |
parent | c2f4dd4364b71ef4eb43925b402377aefe9c1ca0 (diff) | |
parent | d13937116f1e82bf508a6325111b322c30c85eb9 (diff) |
Merge 5.0-rc6 into staging-next
We need the staging fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/drop_caches.c')
-rw-r--r-- | fs/drop_caches.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/drop_caches.c b/fs/drop_caches.c index 82377017130f..d31b6c72b476 100644 --- a/fs/drop_caches.c +++ b/fs/drop_caches.c | |||
@@ -21,8 +21,13 @@ static void drop_pagecache_sb(struct super_block *sb, void *unused) | |||
21 | spin_lock(&sb->s_inode_list_lock); | 21 | spin_lock(&sb->s_inode_list_lock); |
22 | list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { | 22 | list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { |
23 | spin_lock(&inode->i_lock); | 23 | spin_lock(&inode->i_lock); |
24 | /* | ||
25 | * We must skip inodes in unusual state. We may also skip | ||
26 | * inodes without pages but we deliberately won't in case | ||
27 | * we need to reschedule to avoid softlockups. | ||
28 | */ | ||
24 | if ((inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) || | 29 | if ((inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) || |
25 | (inode->i_mapping->nrpages == 0)) { | 30 | (inode->i_mapping->nrpages == 0 && !need_resched())) { |
26 | spin_unlock(&inode->i_lock); | 31 | spin_unlock(&inode->i_lock); |
27 | continue; | 32 | continue; |
28 | } | 33 | } |
@@ -30,6 +35,7 @@ static void drop_pagecache_sb(struct super_block *sb, void *unused) | |||
30 | spin_unlock(&inode->i_lock); | 35 | spin_unlock(&inode->i_lock); |
31 | spin_unlock(&sb->s_inode_list_lock); | 36 | spin_unlock(&sb->s_inode_list_lock); |
32 | 37 | ||
38 | cond_resched(); | ||
33 | invalidate_mapping_pages(inode->i_mapping, 0, -1); | 39 | invalidate_mapping_pages(inode->i_mapping, 0, -1); |
34 | iput(toput_inode); | 40 | iput(toput_inode); |
35 | toput_inode = inode; | 41 | toput_inode = inode; |