aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/target_core_sbc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/target/target_core_sbc.c')
-rw-r--r--drivers/target/target_core_sbc.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c
index a4489444ffbc..42f18fc1067b 100644
--- a/drivers/target/target_core_sbc.c
+++ b/drivers/target/target_core_sbc.c
@@ -1074,7 +1074,7 @@ sbc_dif_copy_prot(struct se_cmd *cmd, unsigned int sectors, bool read,
1074 struct scatterlist *psg; 1074 struct scatterlist *psg;
1075 void *paddr, *addr; 1075 void *paddr, *addr;
1076 unsigned int i, len, left; 1076 unsigned int i, len, left;
1077 unsigned int offset = 0; 1077 unsigned int offset = sg_off;
1078 1078
1079 left = sectors * dev->prot_length; 1079 left = sectors * dev->prot_length;
1080 1080
@@ -1084,11 +1084,10 @@ sbc_dif_copy_prot(struct se_cmd *cmd, unsigned int sectors, bool read,
1084 if (offset >= sg->length) { 1084 if (offset >= sg->length) {
1085 sg = sg_next(sg); 1085 sg = sg_next(sg);
1086 offset = 0; 1086 offset = 0;
1087 sg_off = sg->offset;
1088 } 1087 }
1089 1088
1090 paddr = kmap_atomic(sg_page(psg)) + psg->offset; 1089 paddr = kmap_atomic(sg_page(psg)) + psg->offset;
1091 addr = kmap_atomic(sg_page(sg)) + sg_off; 1090 addr = kmap_atomic(sg_page(sg)) + sg->offset + offset;
1092 1091
1093 if (read) 1092 if (read)
1094 memcpy(paddr, addr, len); 1093 memcpy(paddr, addr, len);
@@ -1163,7 +1162,7 @@ sbc_dif_verify_read(struct se_cmd *cmd, sector_t start, unsigned int sectors,
1163{ 1162{
1164 struct se_device *dev = cmd->se_dev; 1163 struct se_device *dev = cmd->se_dev;
1165 struct se_dif_v1_tuple *sdt; 1164 struct se_dif_v1_tuple *sdt;
1166 struct scatterlist *dsg; 1165 struct scatterlist *dsg, *psg = sg;
1167 sector_t sector = start; 1166 sector_t sector = start;
1168 void *daddr, *paddr; 1167 void *daddr, *paddr;
1169 int i, j, offset = sg_off; 1168 int i, j, offset = sg_off;
@@ -1171,14 +1170,14 @@ sbc_dif_verify_read(struct se_cmd *cmd, sector_t start, unsigned int sectors,
1171 1170
1172 for_each_sg(cmd->t_data_sg, dsg, cmd->t_data_nents, i) { 1171 for_each_sg(cmd->t_data_sg, dsg, cmd->t_data_nents, i) {
1173 daddr = kmap_atomic(sg_page(dsg)) + dsg->offset; 1172 daddr = kmap_atomic(sg_page(dsg)) + dsg->offset;
1174 paddr = kmap_atomic(sg_page(sg)) + sg->offset; 1173 paddr = kmap_atomic(sg_page(psg)) + sg->offset;
1175 1174
1176 for (j = 0; j < dsg->length; j += dev->dev_attrib.block_size) { 1175 for (j = 0; j < dsg->length; j += dev->dev_attrib.block_size) {
1177 1176
1178 if (offset >= sg->length) { 1177 if (offset >= psg->length) {
1179 kunmap_atomic(paddr); 1178 kunmap_atomic(paddr);
1180 sg = sg_next(sg); 1179 psg = sg_next(psg);
1181 paddr = kmap_atomic(sg_page(sg)) + sg->offset; 1180 paddr = kmap_atomic(sg_page(psg)) + psg->offset;
1182 offset = 0; 1181 offset = 0;
1183 } 1182 }
1184 1183