Skip to content
  • Ming Lei's avatar
    block: make sure a big bio is split into at most 256 bvecs · 4d70dca4
    Ming Lei authored
    After arbitrary bio size was introduced, the incoming bio may
    be very big. We have to split the bio into small bios so that
    each holds at most BIO_MAX_PAGES bvecs for safety reason, such
    as bio_clone().
    
    This patch fixes the following kernel crash:
    
    > [  172.660142] BUG: unable to handle kernel NULL pointer dereference at 0000000000000028
    > [  172.660229] IP: [<ffffffff811e53b4>] bio_trim+0xf/0x2a
    > [  172.660289] PGD 7faf3e067 PUD 7f9279067 PMD 0
    > [  172.660399] Oops: 0000 [#1] SMP
    > [...]
    > [  172.664780] Call Trace:
    > [  172.664813]  [<ffffffffa007f3be>] ? raid1_make_request+0x2e8/0xad7 [raid1]
    > [  172.664846]  [<ffffffff811f07da>] ? blk_queue_split+0x377/0x3d4
    > [  172.664880]  [<ffffffffa005fb5f>] ? md_make_request+0xf6/0x1e9 [md_mod]
    > [  172.664912]  [<ffffffff811eb860>] ? generic_make_request+0xb5/0x155
    > [  172.664947]  [<ffffffffa0445c89>] ? prio_io+0x85/0x95 [bcache]
    > [  172.664981]  [<ffffffffa0448252>] ? register_cache_set+0x355/0x8d0 [bcache]
    > [  172.665016]  [<ffffffffa04497d3>] ? register_bcache+0x1006/0x1174 [bcache]
    
    The issue can be reproduced by the following steps:
    	- create one raid1 over two virtio-blk
    	- build bcache device over the above raid1 and another cache device
    	and bucket size is set as 2Mbytes
    	- set cache mode as writeback
    	- run random write over ext4 on the bcache device
    
    Fixes: 54efd50b
    
    (block: make generic_make_request handle arbitrarily sized bios)
    Reported-by: default avatarSebastian Roesner <sroesner-kernelorg@roesner-online.de>
    Reported-by: default avatarEric Wheeler <bcache@lists.ewheeler.net>
    Cc: stable@vger.kernel.org (4.3+)
    Cc: Shaohua Li <shli@fb.com>
    Acked-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
    Signed-off-by: default avatarMing Lei <ming.lei@canonical.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    4d70dca4