[SCSI] be2iscsi: Ensure clean reuse of wrb
This patch ensures that wrb is cleanly resued for io path and is memset to zero for non io path Signed-off-by: Jayamohan Kallickal <jayamohank@serverengines.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
Родитель
f55a24f2c2
Коммит
caf818f118
|
@ -1663,11 +1663,7 @@ hwi_write_sgl(struct iscsi_wrb *pwrb, struct scatterlist *sg,
|
||||||
AMAP_SET_BITS(struct amap_iscsi_wrb, sge0_len, pwrb,
|
AMAP_SET_BITS(struct amap_iscsi_wrb, sge0_len, pwrb,
|
||||||
sg_len);
|
sg_len);
|
||||||
sge_len = sg_len;
|
sge_len = sg_len;
|
||||||
AMAP_SET_BITS(struct amap_iscsi_wrb, sge0_last, pwrb,
|
|
||||||
1);
|
|
||||||
} else {
|
} else {
|
||||||
AMAP_SET_BITS(struct amap_iscsi_wrb, sge0_last, pwrb,
|
|
||||||
0);
|
|
||||||
AMAP_SET_BITS(struct amap_iscsi_wrb, sge1_r2t_offset,
|
AMAP_SET_BITS(struct amap_iscsi_wrb, sge1_r2t_offset,
|
||||||
pwrb, sge_len);
|
pwrb, sge_len);
|
||||||
sg_len = sg_dma_len(sg);
|
sg_len = sg_dma_len(sg);
|
||||||
|
@ -1690,8 +1686,22 @@ hwi_write_sgl(struct iscsi_wrb *pwrb, struct scatterlist *sg,
|
||||||
AMAP_SET_BITS(struct amap_iscsi_sge, addr_lo, psgl,
|
AMAP_SET_BITS(struct amap_iscsi_sge, addr_lo, psgl,
|
||||||
io_task->bhs_pa.u.a32.address_lo);
|
io_task->bhs_pa.u.a32.address_lo);
|
||||||
|
|
||||||
if (num_sg == 2)
|
if (num_sg == 1) {
|
||||||
AMAP_SET_BITS(struct amap_iscsi_wrb, sge1_last, pwrb, 1);
|
AMAP_SET_BITS(struct amap_iscsi_wrb, sge0_last, pwrb,
|
||||||
|
1);
|
||||||
|
AMAP_SET_BITS(struct amap_iscsi_wrb, sge1_last, pwrb,
|
||||||
|
0);
|
||||||
|
} else if (num_sg == 2) {
|
||||||
|
AMAP_SET_BITS(struct amap_iscsi_wrb, sge0_last, pwrb,
|
||||||
|
0);
|
||||||
|
AMAP_SET_BITS(struct amap_iscsi_wrb, sge1_last, pwrb,
|
||||||
|
1);
|
||||||
|
} else {
|
||||||
|
AMAP_SET_BITS(struct amap_iscsi_wrb, sge0_last, pwrb,
|
||||||
|
0);
|
||||||
|
AMAP_SET_BITS(struct amap_iscsi_wrb, sge1_last, pwrb,
|
||||||
|
0);
|
||||||
|
}
|
||||||
sg = l_sg;
|
sg = l_sg;
|
||||||
psgl++;
|
psgl++;
|
||||||
psgl++;
|
psgl++;
|
||||||
|
@ -3476,6 +3486,7 @@ static int beiscsi_mtask(struct iscsi_task *task)
|
||||||
|
|
||||||
cid = beiscsi_conn->beiscsi_conn_cid;
|
cid = beiscsi_conn->beiscsi_conn_cid;
|
||||||
pwrb = io_task->pwrb_handle->pwrb;
|
pwrb = io_task->pwrb_handle->pwrb;
|
||||||
|
memset(pwrb, 0, sizeof(*pwrb));
|
||||||
AMAP_SET_BITS(struct amap_iscsi_wrb, cmdsn_itt, pwrb,
|
AMAP_SET_BITS(struct amap_iscsi_wrb, cmdsn_itt, pwrb,
|
||||||
be32_to_cpu(task->cmdsn));
|
be32_to_cpu(task->cmdsn));
|
||||||
AMAP_SET_BITS(struct amap_iscsi_wrb, wrb_idx, pwrb,
|
AMAP_SET_BITS(struct amap_iscsi_wrb, wrb_idx, pwrb,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче