• Akinobu Mita's avatar
    target: handle odd SG mapping for data transfer memory · 18213afb
    Akinobu Mita authored
    sbc_dif_generate() and sbc_dif_verify() currently assume that each
    SG element for data transfer memory doesn't straddle the block size
    boundary.
    
    However, when using SG_IO ioctl, we can choose the data transfer
    memory which doesn't satisfy that alignment requirement.
    
    In order to handle such cases correctly, this change inverts the outer
    loop to iterate data transfer memory and the inner loop to iterate
    protection information and enables to calculate CRC for a block which
    straddles multiple SG elements.
    Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
    Cc: Tim Chen <tim.c.chen@linux.intel.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: linux-crypto@vger.kernel.org
    Cc: Nicholas Bellinger <nab@linux-iscsi.org>
    Cc: Sagi Grimberg <sagig@mellanox.com>
    Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
    Cc: target-devel@vger.kernel.org
    Cc: linux-scsi@vger.kernel.org
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    18213afb
target_core_sbc.c 37.5 KB