• Md Haris Iqbal's avatar
    RDMA/rtrs-clt: Check state of the rtrs_clt_sess before reading its stats · 41db63a7
    Md Haris Iqbal authored
    When get_next_path_min_inflight is called to select the next path, it
    iterates over the list of available rtrs_clt_sess (paths). It then reads
    the number of inflight IOs for that path to select one which has the least
    inflight IO.
    
    But it may so happen that rtrs_clt_sess (path) is no longer in the
    connected state because closing or error recovery paths can change the status
    of the rtrs_clt_Sess.
    
    For example, the client sent the heart-beat and did not get the
    response, it would change the session status and stop IO processing.
    The added checking of this patch can prevent accessing the broken path
    and generating duplicated error messages.
    
    It is ok if the status is changed after checking the status because
    the error recovery path does not free memory and only tries to
    reconnection. And also it is ok if the session is closed after checking
    the status because closing the session changes the session status and
    flush all IO beforing free memory. If the session is being accessed for
    IO processing, the closing session will wait.
    
    Fixes: 6a98d71d ("RDMA/rtrs: client: main functionality")
    Link: https://lore.kernel.org/r/20210528113018.52290-13-jinpu.wang@ionos.comSigned-off-by: default avatarMd Haris Iqbal <haris.iqbal@ionos.com>
    Reviewed-by: default avatarGioh Kim <gi-oh.kim@ionos.com>
    Signed-off-by: default avatarGioh Kim <gi-oh.kim@ionos.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    41db63a7
rtrs-clt.c 79.3 KB