Skip to content
  • Bodo Stroesser's avatar
    bc2d214a
    scsi: target: tcmu: Implement tmr_notify callback · bc2d214a
    Bodo Stroesser authored
    This patch implements the tmr_notify callback for tcmu.  When the callback
    is called, tcmu checks the list of aborted commands it received as
    parameter:
    
     - aborted commands in the qfull_queue are removed from the queue and
       target_complete_command is called
    
     - from the cmd_ids of aborted commands currently uncompleted in cmd ring
       it creates a list of aborted cmd_ids.
    
    Finally a TMR notification is written to cmd ring containing TMR type and
    cmd_id list. If there is no space in ring, the TMR notification is queued
    on a TMR specific queue.
    
    The TMR specific queue 'tmr_queue' can be seen as a extension of the cmd
    ring. At the end of each iexecution of tcmu_complete_commands() we check
    whether tmr_queue contains TMRs and try to move them onto the ring. If
    tmr_queue is not empty after that, we don't call run_qfull_queue() because
    commands must not overtake TMRs.
    
    This way we guarantee that cmd_ids in TMR notification received by
    userspace either match an active, not yet completed command or are no
    longer valid due to userspace having complete some cmd_ids meanwhile.
    
    New commands that were assigned to an aborted cmd_id will always appear on
    the cmd ring _after_ the TMR.
    
    Link: https://lore.kernel.org/r/20200726153510.13077-8-bstroesser@ts.fujitsu.com
    
    
    Reviewed-by: default avatarMike Christie <michael.christie@oracle.com>
    Signed-off-by: default avatarBodo Stroesser <bstroesser@ts.fujitsu.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    bc2d214a
    scsi: target: tcmu: Implement tmr_notify callback
    Bodo Stroesser authored
    This patch implements the tmr_notify callback for tcmu.  When the callback
    is called, tcmu checks the list of aborted commands it received as
    parameter:
    
     - aborted commands in the qfull_queue are removed from the queue and
       target_complete_command is called
    
     - from the cmd_ids of aborted commands currently uncompleted in cmd ring
       it creates a list of aborted cmd_ids.
    
    Finally a TMR notification is written to cmd ring containing TMR type and
    cmd_id list. If there is no space in ring, the TMR notification is queued
    on a TMR specific queue.
    
    The TMR specific queue 'tmr_queue' can be seen as a extension of the cmd
    ring. At the end of each iexecution of tcmu_complete_commands() we check
    whether tmr_queue contains TMRs and try to move them onto the ring. If
    tmr_queue is not empty after that, we don't call run_qfull_queue() because
    commands must not overtake TMRs.
    
    This way we guarantee that cmd_ids in TMR notification received by
    userspace either match an active, not yet completed command or are no
    longer valid due to userspace having complete some cmd_ids meanwhile.
    
    New commands that were assigned to an aborted cmd_id will always appear on
    the cmd ring _after_ the TMR.
    
    Link: https://lore.kernel.org/r/20200726153510.13077-8-bstroesser@ts.fujitsu.com
    
    
    Reviewed-by: default avatarMike Christie <michael.christie@oracle.com>
    Signed-off-by: default avatarBodo Stroesser <bstroesser@ts.fujitsu.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Loading