• Coly Li's avatar
    bcache: fix bio_{start,end}_io_acct with proper device · a2f32ee8
    Coly Li authored
    Commit 85750aeb ("bcache: use bio_{start,end}_io_acct") moves the
    io account code to the location after bio_set_dev(bio, dc->bdev) in
    cached_dev_make_request(). Then the account is performed incorrectly on
    backing device, indeed the I/O should be counted to bcache device like
    /dev/bcache0.
    
    With the mistaken I/O account, iostat does not display I/O counts for
    bcache device and all the numbers go to backing device. In writeback
    mode, the hard drive may have 340K+ IOPS which is impossible and wrong
    for spinning disk.
    
    This patch introduces bch_bio_start_io_acct() and bch_bio_end_io_acct(),
    which switches bio->bi_disk to bcache device before calling
    bio_start_io_acct() or bio_end_io_acct(). Now the I/Os are counted to
    bcache device, and bcache device, cache device and backing device have
    their correct I/O count information back.
    
    Fixes: 85750aeb ("bcache: use bio_{start,end}_io_acct")
    Signed-off-by: default avatarColy Li <colyli@suse.de>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    a2f32ee8
request.c 35.4 KB