tcm_loop: Enable DIF/DIX modes in SCSI host LLD
This patch updates tcm_loop_driver_probe() to set protection information using scsi_host_set_prot() and scsi_host_set_guard(), which currently enabled all modes of DIF/DIX protection, minus DIX TYPE0. Also, update tcm_loop_submission_work() to pass struct scsi_cmnd related protection into target_submit_cmd_map_sgls() during CDB dispatch. Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Hannes Reinecke <hare@suse.de> Cc: Sagi Grimberg <sagig@mellanox.com> Cc: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
6e611119b1
commit
59dedde2b6
|
@ -217,7 +217,8 @@ static void tcm_loop_submission_work(struct work_struct *work)
|
|||
scsi_bufflen(sc), tcm_loop_sam_attr(sc),
|
||||
sc->sc_data_direction, 0,
|
||||
scsi_sglist(sc), scsi_sg_count(sc),
|
||||
sgl_bidi, sgl_bidi_count, NULL, 0);
|
||||
sgl_bidi, sgl_bidi_count,
|
||||
scsi_prot_sglist(sc), scsi_prot_sg_count(sc));
|
||||
if (rc < 0) {
|
||||
set_host_byte(sc, DID_NO_CONNECT);
|
||||
goto out_done;
|
||||
|
@ -462,7 +463,7 @@ static int tcm_loop_driver_probe(struct device *dev)
|
|||
{
|
||||
struct tcm_loop_hba *tl_hba;
|
||||
struct Scsi_Host *sh;
|
||||
int error;
|
||||
int error, host_prot;
|
||||
|
||||
tl_hba = to_tcm_loop_hba(dev);
|
||||
|
||||
|
@ -486,6 +487,13 @@ static int tcm_loop_driver_probe(struct device *dev)
|
|||
sh->max_channel = 0;
|
||||
sh->max_cmd_len = TL_SCSI_MAX_CMD_LEN;
|
||||
|
||||
host_prot = SHOST_DIF_TYPE1_PROTECTION | SHOST_DIF_TYPE2_PROTECTION |
|
||||
SHOST_DIF_TYPE3_PROTECTION | SHOST_DIX_TYPE1_PROTECTION |
|
||||
SHOST_DIX_TYPE2_PROTECTION | SHOST_DIX_TYPE3_PROTECTION;
|
||||
|
||||
scsi_host_set_prot(sh, host_prot);
|
||||
scsi_host_set_guard(sh, SHOST_DIX_GUARD_CRC);
|
||||
|
||||
error = scsi_add_host(sh, &tl_hba->dev);
|
||||
if (error) {
|
||||
pr_err("%s: scsi_add_host failed\n", __func__);
|
||||
|
|
Loading…
Reference in a new issue