• Nicholas Bellinger's avatar
    tcm_fc: Convert to per-cpu command map pre-allocation of ft_cmd · 5f544cfa
    Nicholas Bellinger authored
    This patch converts tcm_fc to use transport_init_session_tags()
    pre-allocation logic for struct ft_cmd descriptors using per-cpu
    session tag pooling in order to effectively avoid memory allocation
    + release for each received I/O.
    
    It adds percpu_ida_alloc() in ft_recv_cmd() to obtain an tag and
    locate ft_cmd from se_sess->sess_cmd_map[], and percpu_ida_free()
    in ft_free_cmd() to release the tag based upon se_cmd->map_tag id.
    
    It also uses a TCM_FC_DEFAULT_TAGS value of 512, that puts the
    per se_sess->sess_cmd_map allocation at ~360K on 64-bit.
    
    v2 changes:
    
      - Handle possible tag < 0 failure with GFP_ATOMIC
    
    Cc: Mark Rustad <mark.d.rustad@intel.com>
    Cc: Robert Love <robert.w.love@intel.com>
    Cc: Kent Overstreet <kmo@daterainc.com>
    Signed-off-by: default avatarNicholas Bellinger <nab@daterainc.com>
    5f544cfa
tfc_sess.c 11.5 KB