Message ID | 20220718120117.4435-5-d.bogdanov@yadro.com |
---|---|
State | New |
Headers | show |
Series | add support of RSOC command | expand |
On 7/18/22 7:01 AM, Dmitry Bogdanov wrote: > Make support of RSOC turned off by emulate_rsoc attibute. > What was the reason for this?
On Thu, Aug 11, 2022 at 10:43:24PM -0500, Mike Christie wrote: > «Внимание! Данное письмо от внешнего адресата!» > > On 7/18/22 7:01 AM, Dmitry Bogdanov wrote: > > Make support of RSOC turned off by emulate_rsoc attibute. > > > > What was the reason for this? Looks like, it was by analogue to other emulate_* attibutes. But actually RSOC itself is independent to a backstore device, so better to drop this patch :)
On 8/12/22 6:34 AM, Dmitry Bogdanov wrote: > On Thu, Aug 11, 2022 at 10:43:24PM -0500, Mike Christie wrote: >> «Внимание! Данное письмо от внешнего адресата!» >> >> On 7/18/22 7:01 AM, Dmitry Bogdanov wrote: >>> Make support of RSOC turned off by emulate_rsoc attibute. >>> >> >> What was the reason for this? > Looks like, it was by analogue to other emulate_* attibutes. But > actually RSOC itself is independent to a backstore device, so better to > drop this patch :) I was actually ok with it in general. It seemed nice for testing. I was asking because I thought you hit some regressions when it was on and just wanted you add that info to the git commit.
On Fri, Aug 12, 2022 at 01:12:12PM -0500, michael.christie@oracle.com wrote: > > On 8/12/22 6:34 AM, Dmitry Bogdanov wrote: > > On Thu, Aug 11, 2022 at 10:43:24PM -0500, Mike Christie wrote: > >> > >> On 7/18/22 7:01 AM, Dmitry Bogdanov wrote: > >>> Make support of RSOC turned off by emulate_rsoc attibute. > >>> > >> > >> What was the reason for this? > > Looks like, it was by analogue to other emulate_* attibutes. But > > actually RSOC itself is independent to a backstore device, so better to > > drop this patch :) > > I was actually ok with it in general. It seemed nice for testing. > > I was asking because I thought you hit some regressions when it was > on and just wanted you add that info to the git commit. No, there was no regression. So, better to keep this patch but to add to a commit message, that it is just for testing purposes?
On 8/15/22 1:35 AM, Dmitry Bogdanov wrote: > On Fri, Aug 12, 2022 at 01:12:12PM -0500, michael.christie@oracle.com wrote: >> >> On 8/12/22 6:34 AM, Dmitry Bogdanov wrote: >>> On Thu, Aug 11, 2022 at 10:43:24PM -0500, Mike Christie wrote: >>>> >>>> On 7/18/22 7:01 AM, Dmitry Bogdanov wrote: >>>>> Make support of RSOC turned off by emulate_rsoc attibute. >>>>> >>>> >>>> What was the reason for this? >>> Looks like, it was by analogue to other emulate_* attibutes. But >>> actually RSOC itself is independent to a backstore device, so better to >>> drop this patch :) >> >> I was actually ok with it in general. It seemed nice for testing. >> >> I was asking because I thought you hit some regressions when it was >> on and just wanted you add that info to the git commit. > No, there was no regression. > So, better to keep this patch but to add to a commit message, that it > is just for testing purposes? Sorry for the late reply. I was on vacation. Yeah, that seems fine. scsi-ml will take different code paths if RSOC is supported. Other OSs might do the same so it might be useful.
diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c index bbcbbfa72b07..0c1fb222c9da 100644 --- a/drivers/target/target_core_configfs.c +++ b/drivers/target/target_core_configfs.c @@ -547,6 +547,7 @@ DEF_CONFIGFS_ATTRIB_SHOW(unmap_granularity); DEF_CONFIGFS_ATTRIB_SHOW(unmap_granularity_alignment); DEF_CONFIGFS_ATTRIB_SHOW(unmap_zeroes_data); DEF_CONFIGFS_ATTRIB_SHOW(max_write_same_len); +DEF_CONFIGFS_ATTRIB_SHOW(emulate_rsoc); #define DEF_CONFIGFS_ATTRIB_STORE_U32(_name) \ static ssize_t _name##_store(struct config_item *item, const char *page,\ @@ -1175,6 +1176,23 @@ static ssize_t pgr_support_store(struct config_item *item, return count; } +static ssize_t emulate_rsoc_store(struct config_item *item, + const char *page, size_t count) +{ + struct se_dev_attrib *da = to_attrib(item); + bool flag; + int ret; + + ret = strtobool(page, &flag); + if (ret < 0) + return ret; + + da->emulate_rsoc = flag; + pr_debug("dev[%p]: SE Device REPORT_SUPPORTED_OPERATION_CODES_EMULATION flag: %d\n", + da->da_dev, flag); + return count; +} + CONFIGFS_ATTR(, emulate_model_alias); CONFIGFS_ATTR(, emulate_dpo); CONFIGFS_ATTR(, emulate_fua_write); @@ -1187,6 +1205,7 @@ CONFIGFS_ATTR(, emulate_tpws); CONFIGFS_ATTR(, emulate_caw); CONFIGFS_ATTR(, emulate_3pc); CONFIGFS_ATTR(, emulate_pr); +CONFIGFS_ATTR(, emulate_rsoc); CONFIGFS_ATTR(, pi_prot_type); CONFIGFS_ATTR_RO(, hw_pi_prot_type); CONFIGFS_ATTR(, pi_prot_format); @@ -1250,6 +1269,7 @@ struct configfs_attribute *sbc_attrib_attrs[] = { &attr_max_write_same_len, &attr_alua_support, &attr_pgr_support, + &attr_emulate_rsoc, NULL, }; EXPORT_SYMBOL(sbc_attrib_attrs); diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c index 25f33eb25337..600f038217c0 100644 --- a/drivers/target/target_core_device.c +++ b/drivers/target/target_core_device.c @@ -795,6 +795,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name) dev->dev_attrib.emulate_caw = DA_EMULATE_CAW; dev->dev_attrib.emulate_3pc = DA_EMULATE_3PC; dev->dev_attrib.emulate_pr = DA_EMULATE_PR; + dev->dev_attrib.emulate_rsoc = DA_EMULATE_RSOC; dev->dev_attrib.pi_prot_type = TARGET_DIF_TYPE0_PROT; dev->dev_attrib.enforce_pr_isids = DA_ENFORCE_PR_ISIDS; dev->dev_attrib.force_pr_aptpl = DA_FORCE_PR_APTPL; diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c index cf516136b933..a86f4d917aad 100644 --- a/drivers/target/target_core_spc.c +++ b/drivers/target/target_core_spc.c @@ -1906,6 +1906,14 @@ static struct target_opcode_descriptor tcm_opcode_report_target_pgs = { 0xff, 0xff, 0x00, SCSI_CONTROL_MASK}, }; + +static bool spc_rsoc_enabled(struct se_cmd *cmd) +{ + struct se_device *dev = cmd->se_dev; + + return dev->dev_attrib.emulate_rsoc; +} + static struct target_opcode_descriptor tcm_opcode_report_supp_opcodes = { .support = SCSI_SUPPORT_FULL, .serv_action_valid = 1, @@ -1916,6 +1924,7 @@ static struct target_opcode_descriptor tcm_opcode_report_supp_opcodes = { 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, SCSI_CONTROL_MASK}, + .enabled = spc_rsoc_enabled, }; static bool tcm_is_set_tpg_enabled(struct se_cmd *cmd) @@ -2154,6 +2163,9 @@ spc_emulate_report_supp_op_codes(struct se_cmd *cmd) int ret = 0; int i; + if (!cmd->se_dev->dev_attrib.emulate_rsoc) + return TCM_UNSUPPORTED_SCSI_OPCODE; + rbuf = transport_kmap_data_sg(cmd); if (cmd->data_length && !rbuf) { ret = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index 329f88680367..8f8b51d2bc7b 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h @@ -91,6 +91,8 @@ #define DA_EMULATE_ALUA 0 /* Emulate SCSI2 RESERVE/RELEASE and Persistent Reservations by default */ #define DA_EMULATE_PR 1 +/* Emulation for REPORT SUPPORTED OPERATION CODES */ +#define DA_EMULATE_RSOC 1 /* Enforce SCSI Initiator Port TransportID with 'ISID' for PR */ #define DA_ENFORCE_PR_ISIDS 1 /* Force SPC-3 PR Activate Persistence across Target Power Loss */ @@ -690,6 +692,7 @@ struct se_dev_attrib { bool emulate_caw; bool emulate_3pc; bool emulate_pr; + bool emulate_rsoc; enum target_prot_type pi_prot_type; enum target_prot_type hw_pi_prot_type; bool pi_prot_verify;