• Nicholas Bellinger's avatar
    target: Add SCF_EMULATE_QUEUE_FULL -> transport_handle_queue_full · 07bde79a
    Nicholas Bellinger authored
    This patch adds SCF_EMULATE_QUEUE_FULL support using -EAGAIN failures
    via transport_handle_queue_full() to signal queue full in completion
    path TFO->queue_data_in() and TFO->queue_status() callbacks.
    
    This is done using a new se_cmd->transport_qf_callback() to handle
    the following queue full exception cases within target core:
    
    *) TRANSPORT_COMPLETE_OK (for completion path queue full)
    
    *) TRANSPORT_COMPLETE_QF_WP (for TRANSPORT_WRITE_PENDING queue full)
    
    *) transport_send_check_condition_and_sense() failure paths in
       transport_generic_request_failure() and transport_generic_complete_ok()
    
    All logic is driven using se_device->qf_work_queue -> target_qf_do_work()
    to to requeue outstanding se_cmd at the head of se_dev->queue_obj->qobj_list
    for transport_processing_thread() execution.
    
    Tested using tcm_qla2xxx with MAX_OUTSTANDING_COMMANDS=128 for FCP READ
    to trigger the TRANSPORT_COMPLETE_OK queue full cases, and a simulated
    TFO->write_pending() -EAGAIN failure to trigger TRANSPORT_COMPLETE_QF_WP.
    Reported-by: default avatarRoland Dreier <roland@purestorage.com>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    07bde79a
target_core_transport.c 161 KB