Skip to content

Commit

Permalink
Target/sbc: Fix protection copy routine
Browse files Browse the repository at this point in the history
Need to take into account that protection sg_list
(copy-buffer) may consist of multiple entries.

Changes from v0:
- Changed commit description

Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
  • Loading branch information
Sagi Grimberg authored and Nicholas Bellinger committed Feb 12, 2014
1 parent 9d8abf4 commit d6a65fd
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions drivers/target/target_core_sbc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1074,12 +1074,19 @@ sbc_dif_copy_prot(struct se_cmd *cmd, unsigned int sectors, bool read,
struct scatterlist *psg;
void *paddr, *addr;
unsigned int i, len, left;
unsigned int offset = 0;

left = sectors * dev->prot_length;

for_each_sg(cmd->t_prot_sg, psg, cmd->t_prot_nents, i) {

len = min(psg->length, left);
if (offset >= sg->length) {
sg = sg_next(sg);
offset = 0;
sg_off = sg->offset;
}

paddr = kmap_atomic(sg_page(psg)) + psg->offset;
addr = kmap_atomic(sg_page(sg)) + sg_off;

Expand All @@ -1089,6 +1096,7 @@ sbc_dif_copy_prot(struct se_cmd *cmd, unsigned int sectors, bool read,
memcpy(addr, paddr, len);

left -= len;
offset += len;
kunmap_atomic(paddr);
kunmap_atomic(addr);
}
Expand Down

0 comments on commit d6a65fd

Please sign in to comment.