|
@@ -217,7 +217,8 @@ static void tcm_loop_submission_work(struct work_struct *work)
|
|
scsi_bufflen(sc), tcm_loop_sam_attr(sc),
|
|
scsi_bufflen(sc), tcm_loop_sam_attr(sc),
|
|
sc->sc_data_direction, 0,
|
|
sc->sc_data_direction, 0,
|
|
scsi_sglist(sc), scsi_sg_count(sc),
|
|
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) {
|
|
if (rc < 0) {
|
|
set_host_byte(sc, DID_NO_CONNECT);
|
|
set_host_byte(sc, DID_NO_CONNECT);
|
|
goto out_done;
|
|
goto out_done;
|
|
@@ -462,7 +463,7 @@ static int tcm_loop_driver_probe(struct device *dev)
|
|
{
|
|
{
|
|
struct tcm_loop_hba *tl_hba;
|
|
struct tcm_loop_hba *tl_hba;
|
|
struct Scsi_Host *sh;
|
|
struct Scsi_Host *sh;
|
|
- int error;
|
|
|
|
|
|
+ int error, host_prot;
|
|
|
|
|
|
tl_hba = to_tcm_loop_hba(dev);
|
|
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_channel = 0;
|
|
sh->max_cmd_len = TL_SCSI_MAX_CMD_LEN;
|
|
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);
|
|
error = scsi_add_host(sh, &tl_hba->dev);
|
|
if (error) {
|
|
if (error) {
|
|
pr_err("%s: scsi_add_host failed\n", __func__);
|
|
pr_err("%s: scsi_add_host failed\n", __func__);
|