Skip to content
  • Miao Xie's avatar
    btrfs: fix panic caused by direct IO · e65e1535
    Miao Xie authored
    
    
    btrfs paniced when we write >64KB data by direct IO at one time.
    
    Reproduce steps:
     # mkfs.btrfs /dev/sda5 /dev/sda6
     # mount /dev/sda5 /mnt
     # dd if=/dev/zero of=/mnt/tmpfile bs=100K count=1 oflag=direct
    
    Then btrfs paniced:
    mapping failed logical 1103155200 bio len 69632 len 12288
    ------------[ cut here ]------------
    kernel BUG at fs/btrfs/volumes.c:3010!
    [SNIP]
    Pid: 1992, comm: btrfs-worker-0 Not tainted 2.6.37-rc1 #1 D2399/PRIMERGY
    RIP: 0010:[<ffffffffa03d1462>]  [<ffffffffa03d1462>] btrfs_map_bio+0x202/0x210 [btrfs]
    [SNIP]
    Call Trace:
     [<ffffffffa03ab3eb>] __btrfs_submit_bio_done+0x1b/0x20 [btrfs]
     [<ffffffffa03a35ff>] run_one_async_done+0x9f/0xb0 [btrfs]
     [<ffffffffa03d3d20>] run_ordered_completions+0x80/0xc0 [btrfs]
     [<ffffffffa03d45a4>] worker_loop+0x154/0x5f0 [btrfs]
     [<ffffffffa03d4450>] ? worker_loop+0x0/0x5f0 [btrfs]
     [<ffffffffa03d4450>] ? worker_loop+0x0/0x5f0 [btrfs]
     [<ffffffff81083216>] kthread+0x96/0xa0
     [<ffffffff8100cec4>] kernel_thread_helper+0x4/0x10
     [<ffffffff81083180>] ? kthread+0x0/0xa0
     [<ffffffff8100cec0>] ? kernel_thread_helper+0x0/0x10
    
    We fix this problem by splitting bios when we submit bios.
    
    Reported-by: default avatarTsutomu Itoh <t-itoh@jp.fujitsu.com>
    Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
    Tested-by: default avatarTsutomu Itoh <t-itoh@jp.fujitsu.com>
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
    e65e1535