• Nicholas Bellinger's avatar
    iscsi-target: Pre-allocate more tags to avoid ack starvation · 4a4caa29
    Nicholas Bellinger authored
    This patch addresses an traditional iscsi-target fabric ack starvation
    issue where iscsit_allocate_cmd() -> percpu_ida_alloc_state() ends up
    hitting slow path percpu-ida code, because iscsit_ack_from_expstatsn()
    is expected to free ack'ed tags after tag allocation.
    
    This is done to take into account the tags waiting to be acknowledged
    and released in iscsit_ack_from_expstatsn(), but who's number are not
    directly limited by the CmdSN Window queue_depth being enforced by
    the target.
    
    So that said, this patch bumps up the pre-allocated number of
    per session tags to:
    
      (max(queue_depth, ISCSIT_MIN_TAGS) * 2) + ISCSIT_EXTRA_TAGS
    
    for good measure to avoid the percpu_ida_alloc_state() slow path.
    
    Cc: <stable@vger.kernel.org> #3.12+
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    4a4caa29
iscsi_target_nego.c 32.4 KB