diff options
Diffstat (limited to 'fs/buffer.c')
-rw-r--r-- | fs/buffer.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index 1a30db77af32..36d66653b931 100644 --- a/fs/buffer.c +++ b/fs/buffer.c | |||
@@ -29,7 +29,7 @@ | |||
29 | #include <linux/file.h> | 29 | #include <linux/file.h> |
30 | #include <linux/quotaops.h> | 30 | #include <linux/quotaops.h> |
31 | #include <linux/highmem.h> | 31 | #include <linux/highmem.h> |
32 | #include <linux/module.h> | 32 | #include <linux/export.h> |
33 | #include <linux/writeback.h> | 33 | #include <linux/writeback.h> |
34 | #include <linux/hash.h> | 34 | #include <linux/hash.h> |
35 | #include <linux/suspend.h> | 35 | #include <linux/suspend.h> |
@@ -1384,10 +1384,23 @@ static void invalidate_bh_lru(void *arg) | |||
1384 | } | 1384 | } |
1385 | put_cpu_var(bh_lrus); | 1385 | put_cpu_var(bh_lrus); |
1386 | } | 1386 | } |
1387 | |||
1388 | static bool has_bh_in_lru(int cpu, void *dummy) | ||
1389 | { | ||
1390 | struct bh_lru *b = per_cpu_ptr(&bh_lrus, cpu); | ||
1391 | int i; | ||
1387 | 1392 | ||
1393 | for (i = 0; i < BH_LRU_SIZE; i++) { | ||
1394 | if (b->bhs[i]) | ||
1395 | return 1; | ||
1396 | } | ||
1397 | |||
1398 | return 0; | ||
1399 | } | ||
1400 | |||
1388 | void invalidate_bh_lrus(void) | 1401 | void invalidate_bh_lrus(void) |
1389 | { | 1402 | { |
1390 | on_each_cpu(invalidate_bh_lru, NULL, 1); | 1403 | on_each_cpu_cond(has_bh_in_lru, invalidate_bh_lru, NULL, 1, GFP_KERNEL); |
1391 | } | 1404 | } |
1392 | EXPORT_SYMBOL_GPL(invalidate_bh_lrus); | 1405 | EXPORT_SYMBOL_GPL(invalidate_bh_lrus); |
1393 | 1406 | ||