From: Mike Christie <michael.christie@oracle.com>
To: bvanassche@acm.org, hch@lst.de, martin.petersen@oracle.com,
linux-scsi@vger.kernel.org,
james.bottomley@hansenpartnership.com,
linux-block@vger.kernel.org, dm-devel@redhat.com,
snitzer@kernel.org, axboe@kernel.dk,
linux-nvme@lists.infradead.org, chaitanyak@nvidia.com,
kbusch@kernel.org, target-devel@vger.kernel.org
Cc: Mike Christie <michael.christie@oracle.com>
Subject: [PATCH v4 16/18] scsi: target: Pass struct target_opcode_descriptor to enabled
Date: Fri, 24 Feb 2023 11:45:00 -0600 [thread overview]
Message-ID: <20230224174502.321490-17-michael.christie@oracle.com> (raw)
In-Reply-To: <20230224174502.321490-1-michael.christie@oracle.com>
The iblock pr_ops support does not support commands that require port or
I_T Nexus info. This adds a struct target_opcode_descriptor as an argument
to the enabled callout so we can still have the common tcm_is_pr_enabled
and tcm_is_scsi2_reservations_enabled functions and also determine if the
command is supported based on the command and service action and device
settings.
Signed-off-by: Mike Christie <michael.christie@oracle.com>
---
drivers/target/target_core_spc.c | 40 +++++++++++++++++++------------
include/target/target_core_base.h | 3 ++-
2 files changed, 27 insertions(+), 16 deletions(-)
diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c
index 00d34616df5d..caf8d1325007 100644
--- a/drivers/target/target_core_spc.c
+++ b/drivers/target/target_core_spc.c
@@ -1429,7 +1429,8 @@ static struct target_opcode_descriptor tcm_opcode_write_verify16 = {
.update_usage_bits = set_dpofua_usage_bits,
};
-static bool tcm_is_ws_enabled(struct se_cmd *cmd)
+static bool tcm_is_ws_enabled(struct target_opcode_descriptor *descr,
+ struct se_cmd *cmd)
{
struct exec_cmd_ops *ops = cmd->protocol_data;
struct se_device *dev = cmd->se_dev;
@@ -1456,7 +1457,8 @@ static struct target_opcode_descriptor tcm_opcode_write_same32 = {
.update_usage_bits = set_dpofua_usage_bits32,
};
-static bool tcm_is_caw_enabled(struct se_cmd *cmd)
+static bool tcm_is_caw_enabled(struct target_opcode_descriptor *descr,
+ struct se_cmd *cmd)
{
struct se_device *dev = cmd->se_dev;
@@ -1496,7 +1498,8 @@ static struct target_opcode_descriptor tcm_opcode_read_capacity16 = {
0xff, 0xff, 0x00, SCSI_CONTROL_MASK},
};
-static bool tcm_is_rep_ref_enabled(struct se_cmd *cmd)
+static bool tcm_is_rep_ref_enabled(struct target_opcode_descriptor *descr,
+ struct se_cmd *cmd)
{
struct se_device *dev = cmd->se_dev;
@@ -1507,7 +1510,6 @@ static bool tcm_is_rep_ref_enabled(struct se_cmd *cmd)
}
spin_unlock(&dev->t10_alua.lba_map_lock);
return true;
-
}
static struct target_opcode_descriptor tcm_opcode_read_report_refferals = {
@@ -1542,7 +1544,8 @@ static struct target_opcode_descriptor tcm_opcode_sync_cache16 = {
0xff, 0xff, SCSI_GROUP_NUMBER_MASK, SCSI_CONTROL_MASK},
};
-static bool tcm_is_unmap_enabled(struct se_cmd *cmd)
+static bool tcm_is_unmap_enabled(struct target_opcode_descriptor *descr,
+ struct se_cmd *cmd)
{
struct exec_cmd_ops *ops = cmd->protocol_data;
struct se_device *dev = cmd->se_dev;
@@ -1664,7 +1667,8 @@ static struct target_opcode_descriptor tcm_opcode_pri_read_resrv = {
0xff, SCSI_CONTROL_MASK},
};
-static bool tcm_is_pr_enabled(struct se_cmd *cmd)
+static bool tcm_is_pr_enabled(struct target_opcode_descriptor *descr,
+ struct se_cmd *cmd)
{
struct se_device *dev = cmd->se_dev;
@@ -1793,7 +1797,9 @@ static struct target_opcode_descriptor tcm_opcode_pro_register_move = {
.enabled = tcm_is_pr_enabled,
};
-static bool tcm_is_scsi2_reservations_enabled(struct se_cmd *cmd)
+static bool
+tcm_is_scsi2_reservations_enabled(struct target_opcode_descriptor *descr,
+ struct se_cmd *cmd)
{
struct se_device *dev = cmd->se_dev;
@@ -1854,7 +1860,8 @@ static struct target_opcode_descriptor tcm_opcode_inquiry = {
0xff, SCSI_CONTROL_MASK},
};
-static bool tcm_is_3pc_enabled(struct se_cmd *cmd)
+static bool tcm_is_3pc_enabled(struct target_opcode_descriptor *descr,
+ struct se_cmd *cmd)
{
struct se_device *dev = cmd->se_dev;
@@ -1915,8 +1922,8 @@ 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)
+static bool spc_rsoc_enabled(struct target_opcode_descriptor *descr,
+ struct se_cmd *cmd)
{
struct se_device *dev = cmd->se_dev;
@@ -1936,7 +1943,8 @@ static struct target_opcode_descriptor tcm_opcode_report_supp_opcodes = {
.enabled = spc_rsoc_enabled,
};
-static bool tcm_is_set_tpg_enabled(struct se_cmd *cmd)
+static bool tcm_is_set_tpg_enabled(struct target_opcode_descriptor *descr,
+ struct se_cmd *cmd)
{
struct t10_alua_tg_pt_gp *l_tg_pt_gp;
struct se_lun *l_lun = cmd->se_lun;
@@ -2123,7 +2131,7 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
if (descr->serv_action_valid)
return TCM_INVALID_CDB_FIELD;
- if (!descr->enabled || descr->enabled(cmd))
+ if (!descr->enabled || descr->enabled(descr, cmd))
*opcode = descr;
break;
case 0x2:
@@ -2137,7 +2145,8 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
*/
if (descr->serv_action_valid &&
descr->service_action == requested_sa) {
- if (!descr->enabled || descr->enabled(cmd))
+ if (!descr->enabled || descr->enabled(descr,
+ cmd))
*opcode = descr;
} else if (!descr->serv_action_valid)
return TCM_INVALID_CDB_FIELD;
@@ -2150,7 +2159,8 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
* be returned in the one_command parameter data format.
*/
if (descr->service_action == requested_sa)
- if (!descr->enabled || descr->enabled(cmd))
+ if (!descr->enabled || descr->enabled(descr,
+ cmd))
*opcode = descr;
break;
}
@@ -2207,7 +2217,7 @@ spc_emulate_report_supp_op_codes(struct se_cmd *cmd)
for (i = 0; i < ARRAY_SIZE(tcm_supported_opcodes); i++) {
descr = tcm_supported_opcodes[i];
- if (descr->enabled && !descr->enabled(cmd))
+ if (descr->enabled && !descr->enabled(descr, cmd))
continue;
response_length += spc_rsoc_encode_command_descriptor(
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
index 12c9ba16217e..04646b3dbf75 100644
--- a/include/target/target_core_base.h
+++ b/include/target/target_core_base.h
@@ -878,7 +878,8 @@ struct target_opcode_descriptor {
u8 specific_timeout;
u16 nominal_timeout;
u16 recommended_timeout;
- bool (*enabled)(struct se_cmd *cmd);
+ bool (*enabled)(struct target_opcode_descriptor *descr,
+ struct se_cmd *cmd);
void (*update_usage_bits)(u8 *usage_bits,
struct se_device *dev);
u8 usage_bits[];
--
2.25.1
next prev parent reply other threads:[~2023-02-24 17:48 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-24 17:44 [PATCH v4 01/18] Use block pr_ops in LIO Mike Christie
2023-02-24 17:44 ` [PATCH v4 01/18] block: Add PR callouts for read keys and reservation Mike Christie
2023-03-06 5:03 ` Chaitanya Kulkarni
2023-03-14 17:10 ` Christoph Hellwig
2023-02-24 17:44 ` [PATCH v4 02/18] block: Rename BLK_STS_NEXUS to BLK_STS_RESV_CONFLICT Mike Christie
2023-03-14 17:11 ` Christoph Hellwig
2023-03-15 10:04 ` Stefan Haberland
2023-03-15 13:30 ` Christoph Hellwig
2023-03-16 10:17 ` Stefan Haberland
2023-03-16 16:36 ` Mike Christie
2023-03-20 13:06 ` Christoph Hellwig
2023-03-20 16:39 ` Mike Christie
2023-02-24 17:44 ` [PATCH v4 03/18] scsi: Rename sd_pr_command Mike Christie
2023-02-24 17:44 ` [PATCH v4 04/18] scsi: Move sd_pr_type to header to share Mike Christie
2023-03-06 5:06 ` Chaitanya Kulkarni
2023-02-24 17:44 ` [PATCH v4 05/18] scsi: Add support for block PR read keys/reservation Mike Christie
2023-03-06 5:08 ` Chaitanya Kulkarni
2023-03-14 17:11 ` Christoph Hellwig
2023-02-24 17:44 ` [PATCH v4 06/18] dm: " Mike Christie
2023-02-24 17:44 ` [PATCH v4 07/18] nvme: Fix reservation status related structs Mike Christie
2023-03-05 21:26 ` Chaitanya Kulkarni
2023-03-14 17:12 ` Christoph Hellwig
2023-03-14 17:15 ` Christoph Hellwig
2023-03-14 22:23 ` Mike Christie
2023-03-15 5:40 ` Christoph Hellwig
2023-03-20 17:08 ` Mike Christie
2023-02-24 17:44 ` [PATCH v4 08/18] nvme: Don't hardcode the data len for pr commands Mike Christie
2023-02-24 17:44 ` [PATCH v4 09/18] nvme: Move pr code to it's own file Mike Christie
2023-03-14 17:13 ` Christoph Hellwig
2023-03-14 17:30 ` Keith Busch
2023-02-24 17:44 ` [PATCH v4 10/18] nvme: Add helper to send pr command Mike Christie
2023-03-05 21:28 ` Chaitanya Kulkarni
2023-03-06 17:25 ` Mike Christie
2023-03-14 17:13 ` Christoph Hellwig
2023-02-24 17:44 ` [PATCH v4 11/18] nvme: Add pr_ops read_keys support Mike Christie
2023-03-14 17:16 ` Christoph Hellwig
2023-02-24 17:44 ` [PATCH v4 12/18] nvme: Add a nvme_pr_type enum Mike Christie
2023-03-05 21:30 ` Chaitanya Kulkarni
2023-03-14 17:17 ` Christoph Hellwig
2023-02-24 17:44 ` [PATCH v4 13/18] nvme: Add pr_ops read_reservation support Mike Christie
2023-02-24 21:04 ` kernel test robot
2023-03-06 17:25 ` Mike Christie
2023-03-05 21:32 ` Chaitanya Kulkarni
2023-03-14 17:21 ` Christoph Hellwig
2023-02-24 17:44 ` [PATCH v4 14/18] scsi: target: Rename sbc_ops to exec_cmd_ops Mike Christie
2023-02-24 17:44 ` [PATCH v4 15/18] scsi: target: Allow backends to hook into PR handling Mike Christie
2023-02-24 17:45 ` Mike Christie [this message]
2023-02-24 17:45 ` [PATCH v4 17/18] scsi: target: Report and detect unsupported PR commands Mike Christie
2023-02-24 17:45 ` [PATCH v4 18/18] scsi: target: Add block PR support to iblock Mike Christie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230224174502.321490-17-michael.christie@oracle.com \
--to=michael.christie@oracle.com \
--cc=axboe@kernel.dk \
--cc=bvanassche@acm.org \
--cc=chaitanyak@nvidia.com \
--cc=dm-devel@redhat.com \
--cc=hch@lst.de \
--cc=james.bottomley@hansenpartnership.com \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=snitzer@kernel.org \
--cc=target-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).