• Chad Dupuis's avatar
    scsi: qedf: Release RRQ reference correctly when RRQ command times out · adf48842
    Chad Dupuis authored
    When an RRQ request times out the reference is not getting decremented
    correctly as there are still ELS commands leftover when we flush any
    pending I/Os during offload:
    
    [  281.788553] [0000:21:00.3]:[qedf_cmd_timeout:58]:4: ELS timeout, xid=0x96a.
    ...
    [  281.788553] [0000:21:00.3]:[qedf_cmd_timeout:58]:4: ELS timeout, xid=0x96a.
    [  281.788772] [0000:21:00.3]:[qedf_rrq_compl:182]:4: Entered.
    [  281.788774] [0000:21:00.3]:[qedf_rrq_compl:200]:4: rrq_compl: orig io = ffffc90004c556f8, orig xid = 0x81b, rrq_xid = 0x96a, refcount=1
    ...
    [  331.448032] [0000:21:00.3]:[qedf_flush_els_req:1512]:4: Flushing ELS request xid=0x96a refcount=2.
    
    The fix is to call kref_put on the rrq_req in case of timeout as the
    timeout handler will call rrq_compl directly vs. a normal completion
    where it is call from els_compl.
    Signed-off-by: default avatarChad Dupuis <chad.dupuis@cavium.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    adf48842
qedf_els.c 25.7 KB