target/iscsi: Use proper SGL accessors for digest computation

Current implementation assumes that all the buffers of an IO are linked
with a single SG list, which is OK because target-core is only allocating
a contigious scatterlist region.  However, this assumption is wrong for
se_cmd descriptors that want to use chaining across multiple SGL regions.

Fix this up by using proper SGL accessors for digest payload computation.

Signed-off-by: Alexei Potashnik <alexei@purestorage.com>
Cc: Roland Dreier <roland@purestorage.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
Alexei Potashnik 2015-07-20 17:12:12 -07:00 коммит произвёл Nicholas Bellinger
Родитель b6a54b8d89
Коммит aa75679c79
1 изменённых файлов: 4 добавлений и 5 удалений

Просмотреть файл

@ -1209,7 +1209,6 @@ static u32 iscsit_do_crypto_hash_sg(
u8 *pad_bytes)
{
u32 data_crc;
u32 i;
struct scatterlist *sg;
unsigned int page_off;
@ -1218,15 +1217,15 @@ static u32 iscsit_do_crypto_hash_sg(
sg = cmd->first_data_sg;
page_off = cmd->first_data_sg_off;
i = 0;
while (data_length) {
u32 cur_len = min_t(u32, data_length, (sg[i].length - page_off));
u32 cur_len = min_t(u32, data_length, (sg->length - page_off));
crypto_hash_update(hash, &sg[i], cur_len);
crypto_hash_update(hash, sg, cur_len);
data_length -= cur_len;
page_off = 0;
i++;
/* iscsit_map_iovec has already checked for invalid sg pointers */
sg = sg_next(sg);
}
if (padding) {