target: handle odd SG mapping for data transfer memory
authorAkinobu Mita <akinobu.mita@gmail.com>
Fri, 1 May 2015 06:23:51 +0000 (15:23 +0900)
committerNicholas Bellinger <nab@linux-iscsi.org>
Sun, 31 May 2015 05:42:25 +0000 (22:42 -0700)
commit18213afbd8cee9f8a3ac5294dedf543a06559c8b
treea93327feb72cd36cf8c757fe6b12df54820179f9
parent10081fb532a2a2216b7d8e4ad585c985075b6f60
target: handle odd SG mapping for data transfer memory

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: Akinobu 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: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_sbc.c