1. 14 2月, 2017 1 次提交
    • M
      block/loop: fix race between I/O and set_status · ecdd0959
      Ming Lei 提交于
      Inside set_status, transfer need to setup again, so
      we have to drain IO before the transition, otherwise
      oops may be triggered like the following:
      
      	divide error: 0000 [#1] SMP KASAN
      	CPU: 0 PID: 2935 Comm: loop7 Not tainted 4.10.0-rc7+ #213
      	Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs
      	01/01/2011
      	task: ffff88006ba1e840 task.stack: ffff880067338000
      	RIP: 0010:transfer_xor+0x1d1/0x440 drivers/block/loop.c:110
      	RSP: 0018:ffff88006733f108 EFLAGS: 00010246
      	RAX: 0000000000000000 RBX: ffff8800688d7000 RCX: 0000000000000059
      	RDX: 0000000000000000 RSI: 1ffff1000d743f43 RDI: ffff880068891c08
      	RBP: ffff88006733f160 R08: ffff8800688d7001 R09: 0000000000000000
      	R10: 0000000000000000 R11: 0000000000000000 R12: ffff8800688d7000
      	R13: ffff880067b7d000 R14: dffffc0000000000 R15: 0000000000000000
      	FS:  0000000000000000(0000) GS:ffff88006d000000(0000)
      	knlGS:0000000000000000
      	CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      	CR2: 00000000006c17e0 CR3: 0000000066e3b000 CR4: 00000000001406f0
      	Call Trace:
      	 lo_do_transfer drivers/block/loop.c:251 [inline]
      	 lo_read_transfer drivers/block/loop.c:392 [inline]
      	 do_req_filebacked drivers/block/loop.c:541 [inline]
      	 loop_handle_cmd drivers/block/loop.c:1677 [inline]
      	 loop_queue_work+0xda0/0x49b0 drivers/block/loop.c:1689
      	 kthread_worker_fn+0x4c3/0xa30 kernel/kthread.c:630
      	 kthread+0x326/0x3f0 kernel/kthread.c:227
      	 ret_from_fork+0x31/0x40 arch/x86/entry/entry_64.S:430
      	Code: 03 83 e2 07 41 29 df 42 0f b6 04 30 4d 8d 44 24 01 38 d0 7f 08
      	84 c0 0f 85 62 02 00 00 44 89 f8 41 0f b6 48 ff 25 ff 01 00 00 99 <f7>
      	7d c8 48 63 d2 48 03 55 d0 48 89 d0 48 89 d7 48 c1 e8 03 83
      	RIP: transfer_xor+0x1d1/0x440 drivers/block/loop.c:110 RSP:
      	ffff88006733f108
      	---[ end trace 0166f7bd3b0c0933 ]---
      Reported-by: NDmitry Vyukov <dvyukov@google.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: NMing Lei <tom.leiming@gmail.com>
      Tested-by: NDmitry Vyukov <dvyukov@google.com>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      ecdd0959
  2. 08 2月, 2017 1 次提交
  3. 07 2月, 2017 4 次提交
  4. 02 2月, 2017 2 次提交
  5. 01 2月, 2017 1 次提交
    • J
      blk-mq: don't fail allocating driver tag for stopped hw queue · 12d70958
      Jens Axboe 提交于
      We rely on blk_mq_get_driver_tag() not failing if 'wait' is true,
      but it currently fails in that case if the queue happens to be
      stopped at the time of the call.
      
      We don't need to check for stopped here, it's just assigning
      the tag. If the queue is stopped, we'll handle it when
      attempting to run the queue.
      
      This fixes a stall/crash on flush intensive workloads, where
      we proceed to process a flush that doesn't have a valid tag
      assigned.
      Signed-off-by: NJens Axboe <axboe@fb.com>
      12d70958
  6. 31 1月, 2017 13 次提交
  7. 28 1月, 2017 4 次提交
  8. 27 1月, 2017 14 次提交