• James Smart's avatar
    nvmet-fc: fix target sgl list on large transfers · d082dc15
    James Smart authored
    The existing code to carve up the sg list expected an sg element-per-page
    which can be very incorrect with iommu's remapping multiple memory pages
    to fewer bus addresses. To hit this error required a large io payload
    (greater than 256k) and a system that maps on a per-page basis. It's
    possible that large ios could get by fine if the system condensed the
    sgl list into the first 64 elements.
    
    This patch corrects the sg list handling by specifically walking the
    sg list element by element and attempting to divide the transfer up
    on a per-sg element boundary. While doing so, it still tries to keep
    sequences under 256k, but will exceed that rule if a single sg element
    is larger than 256k.
    
    Fixes: 48fa362b ("nvmet-fc: simplify sg list handling")
    Cc: <stable@vger.kernel.org> # 4.14
    Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    d082dc15
fc.c 67.7 KB