diff options
author | Mark Brown <broonie@kernel.org> | 2024-06-03 14:45:04 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2024-06-03 14:45:04 +0300 |
commit | 4ac0f06ca044e3ca938681a0eeb7d52a68b0b30f (patch) | |
tree | 9433afff899211152ff78ed38f9a70ab2bb497fc /drivers/md/bcache/request.c | |
parent | 34864c05a54d1bc544c8c3939aababbc481d99e3 (diff) | |
parent | c3f38fa61af77b49866b006939479069cd451173 (diff) | |
download | linux-4ac0f06ca044e3ca938681a0eeb7d52a68b0b30f.tar.xz |
ASoC: Merge up fixes
We need this to get the i.MX platforms working in CI again.
Diffstat (limited to 'drivers/md/bcache/request.c')
-rw-r--r-- | drivers/md/bcache/request.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c index 83d112bd2b1c..af345dc6fde1 100644 --- a/drivers/md/bcache/request.c +++ b/drivers/md/bcache/request.c @@ -369,10 +369,24 @@ static bool check_should_bypass(struct cached_dev *dc, struct bio *bio) struct io *i; if (test_bit(BCACHE_DEV_DETACHING, &dc->disk.flags) || - c->gc_stats.in_use > CUTOFF_CACHE_ADD || (bio_op(bio) == REQ_OP_DISCARD)) goto skip; + if (c->gc_stats.in_use > CUTOFF_CACHE_ADD) { + /* + * If cached buckets are all clean now, 'true' will be + * returned and all requests will bypass the cache device. + * Then c->sectors_to_gc has no chance to be negative, and + * gc thread won't wake up and caching won't work forever. + * Here call force_wake_up_gc() to avoid such aftermath. + */ + if (BDEV_STATE(&dc->sb) == BDEV_STATE_CLEAN && + c->gc_mark_valid) + force_wake_up_gc(c); + + goto skip; + } + if (mode == CACHE_MODE_NONE || (mode == CACHE_MODE_WRITEAROUND && op_is_write(bio_op(bio)))) |