• James Smart's avatar
    nvme_fcloop: refactor host/target io job access · b6f80773
    James Smart authored
    The split between what the host accesses on its flows vs what the
    target side accesses was flawed. Abort handling didn't properly
    clear initiator vs target structure cross-reference and locks
    weren't used for synchronization. Thus, there were issues of
    freeing structures too soon and access after free.
    
    A couple of these existed pre the IN_ISR mods, but when the
    target upcalls were converted to work items, thus adding delays
    between the 2 sides of accesses, the problems became pronounced.
    
    Resolve by:
    - tracking io state mainly in the tgt-side io structure.
    - make the tgt-side io structure released by reference not by
      code flow.
    - when changing initiator structures, use locks for
      synchronization
    - aborts are clearly tracked for which side saw the abort, and
      after seeing the abort, cross-references are cleared under lock.
    Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    b6f80773
fcloop.c 31.1 KB