Skip to content
  • Ewan D. Milne's avatar
    nvme-fc: initialize nvme_req(rq)->ctrl after calling __nvme_fc_init_request() · dfa74422
    Ewan D. Milne authored
    
    
    __nvme_fc_init_request() invokes memset() on the nvme_fcp_op_w_sgl structure, which
    NULLed-out the nvme_req(req)->ctrl field previously set by nvme_fc_init_request().
    This apparently was not referenced until commit faf4a44fff ("nvme: support traffic
    based keep-alive") which now results in a crash in nvme_complete_rq():
    
    [ 8386.897130] RIP: 0010:panic+0x220/0x26c
    [ 8386.901406] Code: 83 3d 6f ee 72 01 00 74 05 e8 e8 54 02 00 48 c7 c6 40 fd 5b b4 48 c7 c7 d8 8d c6 b3 31e
    [ 8386.922359] RSP: 0018:ffff99650019fc40 EFLAGS: 00000246 ORIG_RAX: ffffffffffffff13
    [ 8386.930804] RAX: 0000000000000046 RBX: 0000000000000000 RCX: 0000000000000006
    [ 8386.938764] RDX: 0000000000000000 RSI: 0000000000000082 RDI: ffff8e325f8168b0
    [ 8386.946725] RBP: ffff99650019fcb0 R08: 0000000000000000 R09: 00000000000004f8
    [ 8386.954687] R10: 0000000000000000 R11: ffff99650019f9b8 R12: ffffffffb3c55f3c
    [ 8386.962648] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000001
    [ 8386.970613]  oops_end+0xd1/0xe0
    [ 8386.974116]  no_context+0x1b2/0x3c0
    [ 8386.978006]  do_page_fault+0x32/0x140
    [ 8386.982090]  page_fault+0x1e/0x30
    [ 8386.985786] RIP: 0010:nvme_complete_rq+0x65/0x1d0 [nvme_core]
    [ 8386.992195] Code: 41 bc 03 00 00 00 74 16 0f 86 c3 00 00 00 66 3d 83 00 41 bc 06 00 00 00 0f 85 e7 00 000
    [ 8387.013147] RSP: 0018:ffff99650019fe18 EFLAGS: 00010246
    [ 8387.018973] RAX: 0000000000000000 RBX: ffff8e322ae51280 RCX: 0000000000000001
    [ 8387.026935] RDX: 0000000000000400 RSI: 0000000000000001 RDI: ffff8e322ae51280
    [ 8387.034897] RBP: ffff8e322ae51280 R08: 0000000000000000 R09: ffffffffb2f0b890
    [ 8387.042859] R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000000000
    [ 8387.050821] R13: 0000000000000100 R14: 0000000000000004 R15: ffff8e2b0446d990
    [ 8387.058782]  ? swiotlb_unmap_page+0x40/0x40
    [ 8387.063448]  nvme_fc_complete_rq+0x2d/0x70 [nvme_fc]
    [ 8387.068986]  blk_done_softirq+0xa1/0xd0
    [ 8387.073264]  __do_softirq+0xd6/0x2a9
    [ 8387.077251]  run_ksoftirqd+0x26/0x40
    [ 8387.081238]  smpboot_thread_fn+0x10e/0x160
    [ 8387.085807]  kthread+0xf8/0x130
    [ 8387.089309]  ? sort_range+0x20/0x20
    [ 8387.093198]  ? kthread_stop+0x110/0x110
    [ 8387.097475]  ret_from_fork+0x35/0x40
    [ 8387.101462] ---[ end trace 7106b0adf5e422f8 ]---
    
    Fixes: faf4a44fff ("nvme: support traffic based keep-alive")
    Signed-off-by: default avatarEwan D. Milne <emilne@redhat.com>
    Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    dfa74422