target: reject COMPARE_AND_WRITE if emulate_caw is not set
In struct se_dev_attrib, there is a field emulate_caw exposed as a /sys/kernel/config/target/core/$HBA/$DEV/attrib/. If this field is set zero, it means the corresponding struct se_device does not support the scsi cmd COMPARE_AND_WRITE In function sbc_parse_cdb(), go ahead and reject scsi COMPARE_AND_WRITE if emulate_caw is not set, because it has been explicitly disabled from user-space. (Make pr_err ratelimited - nab) Signed-off-by: Jiang Yi <jiangyilism@gmail.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
eceb4459df
commit
12f66e4a0f
|
@ -1005,6 +1005,12 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case COMPARE_AND_WRITE:
|
case COMPARE_AND_WRITE:
|
||||||
|
if (!dev->dev_attrib.emulate_caw) {
|
||||||
|
pr_err_ratelimited("se_device %s/%s (vpd_unit_serial %s) reject"
|
||||||
|
" COMPARE_AND_WRITE\n", dev->se_hba->backend->ops->name,
|
||||||
|
dev->dev_group.cg_item.ci_name, dev->t10_wwn.unit_serial);
|
||||||
|
return TCM_UNSUPPORTED_SCSI_OPCODE;
|
||||||
|
}
|
||||||
sectors = cdb[13];
|
sectors = cdb[13];
|
||||||
/*
|
/*
|
||||||
* Currently enforce COMPARE_AND_WRITE for a single sector
|
* Currently enforce COMPARE_AND_WRITE for a single sector
|
||||||
|
|
Loading…
Reference in a new issue