Patch "bcache: fix wrong cache_misses statistics" has been added to the 4.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
bcache: fix wrong cache_misses statistics
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
bcache-fix-wrong-cache_misses-statistics.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Mon Dec 18 13:28:59 CET 2017
From: "tang.junhui" <[email protected]>
Date: Mon, 30 Oct 2017 14:46:34 -0700
Subject: bcache: fix wrong cache_misses statistics
From: "tang.junhui" <[email protected]>
[ Upstream commit c157313791a999646901b3e3c6888514ebc36d62 ]
Currently, Cache missed IOs are identified by s->cache_miss, but actually, there are many situations that missed IOs are not assigned a value for s->cache_miss in cached_dev_cache_miss(), for example, a bypassed IO (s->iop.bypass = 1), or the cache_bio allocate failed. In these situations, it will go to out_put or out_submit, and s->cache_miss is null, which leads bch_mark_cache_accounting() to treat this IO as a hit IO.
[ML: applied by 3-way merge]
--- drivers/md/bcache/request.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/md/bcache/request.c +5 -1
@@ -463,6 +463,7 @@ struct search { unsigned recoverable:1; unsigned write:1; unsigned read_dirty_data:1; + unsigned cache_missed:1;unsigned long start_time;
@@ -649,6 +650,7 @@ static inline struct search *search_allo s->orig_bio = bio; s->cache_miss =NULL ; + s->cache_missed =0 ; s->d = d; s->recoverable =1 ; s->write =op_is_write (bio_op (bio));
@@ -767,7 +769,7 @@ static void cached_dev_read_done_bh(stru struct cached_dev *dc = container_of(s->d, struct cached_dev, disk);bch_mark_cache_accounting (s->iop.c, s->d, - !s->cache_miss, s->iop.bypass); + !s->cache_missed, s->iop.bypass);trace_bcache_read (s->orig_bio, !s->cache_miss, s->iop.bypass);if (s->iop.status)
@@ -786,6 +788,8 @@ static int cached_dev_cache_miss(struct struct cached_dev *dc = container_of(s->d, struct cached_dev, disk);struct bio *miss, *cache_bio; + s->cache_missed =1 ; +if (s->cache_miss || s->iop.bypass) { miss =bio_next_split (bio, sectors,GFP_NOIO , s->d->bio_split); ret = miss == bio ?MAP_DONE :MAP_CONTINUE ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/bcache-fix-wrong-cache_misses-statistics.patch