• Akinobu Mita's avatar
    [SCSI] scsi_debug: avoid partial copying PI from prot_sglist to dif_storep · 65f72f2a
    Akinobu Mita authored
    If data integrity support is enabled, prot_verify_write() is called in
    response to WRITE commands and it verifies protection info from
    prot_sglist by comparing against data sglist, and copies protection info
    to dif_storep.
    
    When multiple blocks are transfered by a WRITE command, it verifies and
    copies these blocks one by one.  So if it fails to verify protection
    info in the middle of blocks, the actual data transfer to fake_storep
    isn't proceeded at all although protection info for some blocks are
    already copied to dif_storep.  Therefore, it breaks the data integrity
    between fake_storep and dif_storep.
    
    This fixes it by ensuring that copying protection info to dif_storep is
    done after all blocks are successfully verified.  Reusing dif_copy_prot()
    with supporting the opposite direction simplifies this fix.
    Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
    Acked-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
    65f72f2a
scsi_debug.c 119 KB