[SCSI] scsi_debug: avoid partial copying PI from prot_sglist to dif_storep
authorAkinobu Mita <akinobu.mita@gmail.com>
Wed, 18 Sep 2013 12:27:26 +0000 (21:27 +0900)
committerJames Bottomley <JBottomley@Parallels.com>
Fri, 25 Oct 2013 08:58:12 +0000 (09:58 +0100)
commit65f72f2a2fe89f072d6a88e5cd69a64270b9c436
tree05da71cdc92fcb9ea0888fdd2316c340ac89baf9
parentbb8c063c6afcd930b8da944927144f2982609638
[SCSI] scsi_debug: avoid partial copying PI from prot_sglist to dif_storep

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: Akinobu Mita <akinobu.mita@gmail.com>
Acked-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/scsi_debug.c