On 09/01/2018 10:27 AM, tang.junhui@xxxxxxxxxx wrote: > From: Tang Junhui <tang.junhui@xxxxxxxxxx> > > When we run IO in a detached device, and run iostat to shows IO status, > normally it will show like bellow (Omitted some fields): > Device: ... avgrq-sz avgqu-sz await r_await w_await svctm %util > sdd ... 15.89 0.53 1.82 0.20 2.23 1.81 52.30 > bcache0 ... 15.89 115.42 0.00 0.00 0.00 2.40 69.60 > but after IO stopped, there are still very big avgqu-sz and %util > values as bellow: > Device: ... avgrq-sz avgqu-sz await r_await w_await svctm %util > bcache0 ... 0 5326.32 0.00 0.00 0.00 0.00 100.10 > > The reason for this issue is that, only generic_start_io_acct() called > and no generic_end_io_acct() called for detached device in > cached_dev_make_request(). See the code: > //start generic_start_io_acct() > generic_start_io_acct(q, rw, bio_sectors(bio), &d->disk->part0); > if (cached_dev_get(dc)) { > //will callback generic_end_io_acct() > } > else { > //will not call generic_end_io_acct() > } > > This patch calls generic_end_io_acct() in the end of IO for detached > devices, so we can show IO state correctly. > > Signed-off-by: Tang Junhui <tang.junhui@xxxxxxxxxx> It looks good to me. Reviewed-by: Coly Li <colyli@xxxxxxx> I also modify the backing device bi_end_io to catch I/O status in my backing device failure patches, so I am thinking of pick this patch into my device failure patch set, then Mike does not need to merge the conflict. Coly Li [code snipped] -- To unsubscribe from this list: send the line "unsubscribe linux-bcache" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html