All of lore.kernel.org
 help / color / mirror / Atom feed
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 v3 04/19] scsi: Add support for block PR read keys/reservation
Date: Wed, 26 Oct 2022 18:19:30 -0500	[thread overview]
Message-ID: <20221026231945.6609-5-michael.christie@oracle.com> (raw)
In-Reply-To: <20221026231945.6609-1-michael.christie@oracle.com>

This adds support in sd.c for the block PR read keys and read reservation
callouts.

Signed-off-by: Mike Christie <michael.christie@oracle.com>
---
 drivers/scsi/sd.c            | 104 +++++++++++++++++++++++++++++++++++
 include/scsi/scsi_block_pr.h |  20 +++++++
 include/scsi/scsi_proto.h    |   5 ++
 3 files changed, 129 insertions(+)

diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index ad9374b07585..86b602399000 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -1695,6 +1695,108 @@ static int sd_get_unique_id(struct gendisk *disk, u8 id[16],
 	return ret;
 }
 
+static int sd_pr_in_command(struct block_device *bdev, u8 sa,
+			    unsigned char *data, int data_len)
+{
+	struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
+	struct scsi_device *sdev = sdkp->device;
+	struct scsi_sense_hdr sshdr;
+	u8 cmd[10] = { PERSISTENT_RESERVE_IN, sa };
+	struct scsi_failure failures[] = {
+		{
+			.sense = UNIT_ATTENTION,
+			.asc = SCMD_FAILURE_ASC_ANY,
+			.ascq = SCMD_FAILURE_ASCQ_ANY,
+			.allowed = 5,
+			.result = SAM_STAT_CHECK_CONDITION,
+		},
+		{},
+	};
+	int result;
+
+	put_unaligned_be16(data_len, &cmd[7]);
+
+	result = scsi_exec_req(((struct scsi_exec_args) {
+					.sdev = sdev,
+					.cmd = cmd,
+					.data_dir = DMA_FROM_DEVICE,
+					.buf = data,
+					.buf_len = data_len,
+					.sshdr = &sshdr,
+					.timeout = SD_TIMEOUT,
+					.retries = sdkp->max_retries,
+					.failures = failures }));
+	if (scsi_status_is_check_condition(result) &&
+	    scsi_sense_valid(&sshdr)) {
+		sdev_printk(KERN_INFO, sdev, "PR command failed: %d\n", result);
+		scsi_print_sense_hdr(sdev, NULL, &sshdr);
+	}
+
+	return result;
+}
+
+static int sd_pr_read_keys(struct block_device *bdev, struct pr_keys *keys_info,
+			   u32 keys_len)
+{
+	int result, i, data_offset, num_copy_keys;
+	int data_len = keys_len + 8;
+	u8 *data;
+
+	data = kzalloc(data_len, GFP_KERNEL);
+	if (!data)
+		return -ENOMEM;
+
+	result = sd_pr_in_command(bdev, READ_KEYS, data, data_len);
+	if (result)
+		goto free_data;
+
+	keys_info->generation = get_unaligned_be32(&data[0]);
+	keys_info->num_keys = get_unaligned_be32(&data[4]) / 8;
+
+	data_offset = 8;
+	num_copy_keys = min(keys_len / 8, keys_info->num_keys);
+
+	for (i = 0; i < num_copy_keys; i++) {
+		keys_info->keys[i] = get_unaligned_be64(&data[data_offset]);
+		data_offset += 8;
+	}
+
+free_data:
+	kfree(data);
+	return result;
+}
+
+static int sd_pr_read_reservation(struct block_device *bdev,
+				  struct pr_held_reservation *rsv)
+{
+	struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
+	struct scsi_device *sdev = sdkp->device;
+	u8 data[24] = { 0, };
+	int result, len;
+
+	result = sd_pr_in_command(bdev, READ_RESERVATION, data, sizeof(data));
+	if (result)
+		return result;
+
+	memset(rsv, 0, sizeof(*rsv));
+	len = get_unaligned_be32(&data[4]);
+	if (!len)
+		return result;
+
+	/* Make sure we have at least the key and type */
+	if (len < 14) {
+		sdev_printk(KERN_INFO, sdev,
+			    "READ RESERVATION failed due to short return buffer of %d bytes\n",
+			    len);
+		return -EINVAL;
+	}
+
+	rsv->generation = get_unaligned_be32(&data[0]);
+	rsv->key = get_unaligned_be64(&data[8]);
+	rsv->type = scsi_pr_type_to_block(data[21] & 0x0f);
+	return 0;
+}
+
 static int sd_pr_out_command(struct block_device *bdev, u8 sa,
 		u64 key, u64 sa_key, enum scsi_pr_type type, u8 flags)
 {
@@ -1787,6 +1889,8 @@ static const struct pr_ops sd_pr_ops = {
 	.pr_release	= sd_pr_release,
 	.pr_preempt	= sd_pr_preempt,
 	.pr_clear	= sd_pr_clear,
+	.pr_read_keys	= sd_pr_read_keys,
+	.pr_read_reservation = sd_pr_read_reservation,
 };
 
 static void scsi_disk_free_disk(struct gendisk *disk)
diff --git a/include/scsi/scsi_block_pr.h b/include/scsi/scsi_block_pr.h
index 6e99f844330d..137bf2247273 100644
--- a/include/scsi/scsi_block_pr.h
+++ b/include/scsi/scsi_block_pr.h
@@ -33,4 +33,24 @@ static inline enum scsi_pr_type block_pr_type_to_scsi(enum pr_type type)
 	}
 };
 
+static inline enum pr_type scsi_pr_type_to_block(enum scsi_pr_type type)
+{
+	switch (type) {
+	case SCSI_PR_WRITE_EXCLUSIVE:
+		return PR_WRITE_EXCLUSIVE;
+	case SCSI_PR_EXCLUSIVE_ACCESS:
+		return PR_EXCLUSIVE_ACCESS;
+	case SCSI_PR_WRITE_EXCLUSIVE_REG_ONLY:
+		return PR_WRITE_EXCLUSIVE_REG_ONLY;
+	case SCSI_PR_EXCLUSIVE_ACCESS_REG_ONLY:
+		return PR_EXCLUSIVE_ACCESS_REG_ONLY;
+	case SCSI_PR_WRITE_EXCLUSIVE_ALL_REGS:
+		return PR_WRITE_EXCLUSIVE_ALL_REGS;
+	case SCSI_PR_EXCLUSIVE_ACCESS_ALL_REGS:
+		return PR_EXCLUSIVE_ACCESS_ALL_REGS;
+	default:
+		return 0;
+	}
+}
+
 #endif
diff --git a/include/scsi/scsi_proto.h b/include/scsi/scsi_proto.h
index c03e35fc382c..0fd6e295375a 100644
--- a/include/scsi/scsi_proto.h
+++ b/include/scsi/scsi_proto.h
@@ -151,6 +151,11 @@
 #define ZO_FINISH_ZONE	      0x02
 #define ZO_OPEN_ZONE	      0x03
 #define ZO_RESET_WRITE_POINTER 0x04
+/* values for PR in service action */
+#define READ_KEYS             0x00
+#define READ_RESERVATION      0x01
+#define REPORT_CAPABILITES    0x02
+#define READ_FULL_STATUS      0x03
 /* values for variable length command */
 #define XDREAD_32	      0x03
 #define XDWRITE_32	      0x04
-- 
2.25.1


WARNING: multiple messages have this Message-ID (diff)
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: [dm-devel] [PATCH v3 04/19] scsi: Add support for block PR read keys/reservation
Date: Wed, 26 Oct 2022 18:19:30 -0500	[thread overview]
Message-ID: <20221026231945.6609-5-michael.christie@oracle.com> (raw)
In-Reply-To: <20221026231945.6609-1-michael.christie@oracle.com>

This adds support in sd.c for the block PR read keys and read reservation
callouts.

Signed-off-by: Mike Christie <michael.christie@oracle.com>
---
 drivers/scsi/sd.c            | 104 +++++++++++++++++++++++++++++++++++
 include/scsi/scsi_block_pr.h |  20 +++++++
 include/scsi/scsi_proto.h    |   5 ++
 3 files changed, 129 insertions(+)

diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index ad9374b07585..86b602399000 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -1695,6 +1695,108 @@ static int sd_get_unique_id(struct gendisk *disk, u8 id[16],
 	return ret;
 }
 
+static int sd_pr_in_command(struct block_device *bdev, u8 sa,
+			    unsigned char *data, int data_len)
+{
+	struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
+	struct scsi_device *sdev = sdkp->device;
+	struct scsi_sense_hdr sshdr;
+	u8 cmd[10] = { PERSISTENT_RESERVE_IN, sa };
+	struct scsi_failure failures[] = {
+		{
+			.sense = UNIT_ATTENTION,
+			.asc = SCMD_FAILURE_ASC_ANY,
+			.ascq = SCMD_FAILURE_ASCQ_ANY,
+			.allowed = 5,
+			.result = SAM_STAT_CHECK_CONDITION,
+		},
+		{},
+	};
+	int result;
+
+	put_unaligned_be16(data_len, &cmd[7]);
+
+	result = scsi_exec_req(((struct scsi_exec_args) {
+					.sdev = sdev,
+					.cmd = cmd,
+					.data_dir = DMA_FROM_DEVICE,
+					.buf = data,
+					.buf_len = data_len,
+					.sshdr = &sshdr,
+					.timeout = SD_TIMEOUT,
+					.retries = sdkp->max_retries,
+					.failures = failures }));
+	if (scsi_status_is_check_condition(result) &&
+	    scsi_sense_valid(&sshdr)) {
+		sdev_printk(KERN_INFO, sdev, "PR command failed: %d\n", result);
+		scsi_print_sense_hdr(sdev, NULL, &sshdr);
+	}
+
+	return result;
+}
+
+static int sd_pr_read_keys(struct block_device *bdev, struct pr_keys *keys_info,
+			   u32 keys_len)
+{
+	int result, i, data_offset, num_copy_keys;
+	int data_len = keys_len + 8;
+	u8 *data;
+
+	data = kzalloc(data_len, GFP_KERNEL);
+	if (!data)
+		return -ENOMEM;
+
+	result = sd_pr_in_command(bdev, READ_KEYS, data, data_len);
+	if (result)
+		goto free_data;
+
+	keys_info->generation = get_unaligned_be32(&data[0]);
+	keys_info->num_keys = get_unaligned_be32(&data[4]) / 8;
+
+	data_offset = 8;
+	num_copy_keys = min(keys_len / 8, keys_info->num_keys);
+
+	for (i = 0; i < num_copy_keys; i++) {
+		keys_info->keys[i] = get_unaligned_be64(&data[data_offset]);
+		data_offset += 8;
+	}
+
+free_data:
+	kfree(data);
+	return result;
+}
+
+static int sd_pr_read_reservation(struct block_device *bdev,
+				  struct pr_held_reservation *rsv)
+{
+	struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
+	struct scsi_device *sdev = sdkp->device;
+	u8 data[24] = { 0, };
+	int result, len;
+
+	result = sd_pr_in_command(bdev, READ_RESERVATION, data, sizeof(data));
+	if (result)
+		return result;
+
+	memset(rsv, 0, sizeof(*rsv));
+	len = get_unaligned_be32(&data[4]);
+	if (!len)
+		return result;
+
+	/* Make sure we have at least the key and type */
+	if (len < 14) {
+		sdev_printk(KERN_INFO, sdev,
+			    "READ RESERVATION failed due to short return buffer of %d bytes\n",
+			    len);
+		return -EINVAL;
+	}
+
+	rsv->generation = get_unaligned_be32(&data[0]);
+	rsv->key = get_unaligned_be64(&data[8]);
+	rsv->type = scsi_pr_type_to_block(data[21] & 0x0f);
+	return 0;
+}
+
 static int sd_pr_out_command(struct block_device *bdev, u8 sa,
 		u64 key, u64 sa_key, enum scsi_pr_type type, u8 flags)
 {
@@ -1787,6 +1889,8 @@ static const struct pr_ops sd_pr_ops = {
 	.pr_release	= sd_pr_release,
 	.pr_preempt	= sd_pr_preempt,
 	.pr_clear	= sd_pr_clear,
+	.pr_read_keys	= sd_pr_read_keys,
+	.pr_read_reservation = sd_pr_read_reservation,
 };
 
 static void scsi_disk_free_disk(struct gendisk *disk)
diff --git a/include/scsi/scsi_block_pr.h b/include/scsi/scsi_block_pr.h
index 6e99f844330d..137bf2247273 100644
--- a/include/scsi/scsi_block_pr.h
+++ b/include/scsi/scsi_block_pr.h
@@ -33,4 +33,24 @@ static inline enum scsi_pr_type block_pr_type_to_scsi(enum pr_type type)
 	}
 };
 
+static inline enum pr_type scsi_pr_type_to_block(enum scsi_pr_type type)
+{
+	switch (type) {
+	case SCSI_PR_WRITE_EXCLUSIVE:
+		return PR_WRITE_EXCLUSIVE;
+	case SCSI_PR_EXCLUSIVE_ACCESS:
+		return PR_EXCLUSIVE_ACCESS;
+	case SCSI_PR_WRITE_EXCLUSIVE_REG_ONLY:
+		return PR_WRITE_EXCLUSIVE_REG_ONLY;
+	case SCSI_PR_EXCLUSIVE_ACCESS_REG_ONLY:
+		return PR_EXCLUSIVE_ACCESS_REG_ONLY;
+	case SCSI_PR_WRITE_EXCLUSIVE_ALL_REGS:
+		return PR_WRITE_EXCLUSIVE_ALL_REGS;
+	case SCSI_PR_EXCLUSIVE_ACCESS_ALL_REGS:
+		return PR_EXCLUSIVE_ACCESS_ALL_REGS;
+	default:
+		return 0;
+	}
+}
+
 #endif
diff --git a/include/scsi/scsi_proto.h b/include/scsi/scsi_proto.h
index c03e35fc382c..0fd6e295375a 100644
--- a/include/scsi/scsi_proto.h
+++ b/include/scsi/scsi_proto.h
@@ -151,6 +151,11 @@
 #define ZO_FINISH_ZONE	      0x02
 #define ZO_OPEN_ZONE	      0x03
 #define ZO_RESET_WRITE_POINTER 0x04
+/* values for PR in service action */
+#define READ_KEYS             0x00
+#define READ_RESERVATION      0x01
+#define REPORT_CAPABILITES    0x02
+#define READ_FULL_STATUS      0x03
 /* values for variable length command */
 #define XDREAD_32	      0x03
 #define XDWRITE_32	      0x04
-- 
2.25.1

--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel


  parent reply	other threads:[~2022-10-26 23:25 UTC|newest]

Thread overview: 114+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-26 23:19 [PATCH v3 00/19] Use block pr_ops in LIO Mike Christie
2022-10-26 23:19 ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 01/19] block: Add PR callouts for read keys and reservation Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-11-02 22:50   ` Bart Van Assche
2022-11-02 22:50     ` [dm-devel] " Bart Van Assche
2022-11-03  1:54     ` Mike Christie
2022-11-03  1:54       ` [dm-devel] " Mike Christie
2022-11-02 22:53   ` Bart Van Assche
2022-11-02 22:53     ` [dm-devel] " Bart Van Assche
2022-11-03  2:25     ` Mike Christie
2022-11-03  2:25       ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 02/19] scsi: Rename sd_pr_command Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-11-01  5:33   ` Chaitanya Kulkarni
2022-11-01  5:33     ` [dm-devel] " Chaitanya Kulkarni
2022-10-26 23:19 ` [PATCH v3 03/19] scsi: Move sd_pr_type to header to share Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-11-01  5:43   ` Chaitanya Kulkarni
2022-11-01  5:43     ` [dm-devel] " Chaitanya Kulkarni
2022-11-01 16:43     ` Mike Christie
2022-11-01 16:43       ` [dm-devel] " Mike Christie
2022-11-02 22:47   ` Bart Van Assche
2022-11-02 22:47     ` [dm-devel] " Bart Van Assche
2022-11-03  2:13     ` Mike Christie
2022-11-03  2:13       ` [dm-devel] " Mike Christie
2022-11-03 18:14       ` Bart Van Assche
2022-11-03 18:14         ` [dm-devel] " Bart Van Assche
2022-10-26 23:19 ` Mike Christie [this message]
2022-10-26 23:19   ` [dm-devel] [PATCH v3 04/19] scsi: Add support for block PR read keys/reservation Mike Christie
2022-10-27  6:08   ` kernel test robot
2022-10-27  6:08     ` [dm-devel] " kernel test robot
2022-10-27  7:59   ` kernel test robot
2022-10-27  7:59     ` [dm-devel] " kernel test robot
2022-10-27 10:41   ` kernel test robot
2022-10-27 10:41     ` [dm-devel] " kernel test robot
2022-11-01  5:45   ` Chaitanya Kulkarni
2022-11-01  5:45     ` [dm-devel] " Chaitanya Kulkarni
2022-11-02 22:54   ` Bart Van Assche
2022-11-02 22:54     ` [dm-devel] " Bart Van Assche
2022-10-26 23:19 ` [PATCH v3 05/19] dm: " Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 06/19] nvme: Fix reservation status related structs Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-27 17:04   ` Keith Busch
2022-10-27 17:04     ` [dm-devel] " Keith Busch
2022-10-26 23:19 ` [PATCH v3 07/19] nvme: Don't hardcode the data len for pr commands Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-27 17:05   ` Keith Busch
2022-10-27 17:05     ` [dm-devel] " Keith Busch
2022-11-01  5:29   ` Chaitanya Kulkarni
2022-11-01  5:29     ` [dm-devel] " Chaitanya Kulkarni
2022-10-26 23:19 ` [PATCH v3 08/19] nvme: Move pr code to it's own file Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-27 17:06   ` Keith Busch
2022-10-27 17:06     ` [dm-devel] " Keith Busch
2022-10-28 16:06     ` Mike Christie
2022-10-28 16:06       ` [dm-devel] " Mike Christie
2022-10-28 16:38       ` Keith Busch
2022-10-28 16:38         ` [dm-devel] " Keith Busch
2022-10-30  8:06         ` Christoph Hellwig
2022-10-30  8:06           ` [dm-devel] " Christoph Hellwig
2022-11-01  5:25   ` Chaitanya Kulkarni
2022-11-01  5:25     ` [dm-devel] " Chaitanya Kulkarni
2022-10-26 23:19 ` [PATCH v3 09/19] nvme: Add pr_ops read_keys support Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-30  8:17   ` Christoph Hellwig
2022-10-30  8:17     ` [dm-devel] " Christoph Hellwig
2022-10-30 20:47     ` Mike Christie
2022-10-30 20:47       ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 10/19] nvme: Move NVMe and Block PR types to an array Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-27 15:18   ` Keith Busch
2022-10-27 15:18     ` [dm-devel] " Keith Busch
2022-10-27 17:06     ` Mike Christie
2022-10-27 17:06       ` [dm-devel] " Mike Christie
2022-10-27 17:13       ` michael.christie
2022-10-27 17:13         ` [dm-devel] " michael.christie
2022-10-27 17:16         ` Keith Busch
2022-10-27 17:16           ` [dm-devel] " Keith Busch
2022-10-28 16:05           ` Mike Christie
2022-10-28 16:05             ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 11/19] nvme: Add pr_ops read_reservation support Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-30  8:18   ` Christoph Hellwig
2022-10-30  8:18     ` [dm-devel] " Christoph Hellwig
2022-10-30 20:54     ` Mike Christie
2022-10-30 20:54       ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 12/19] block,nvme,scsi,dm: Add blk_status to pr_ops callouts Mike Christie
2022-10-26 23:19   ` [dm-devel] [PATCH v3 12/19] block, nvme, scsi, dm: " Mike Christie
2022-10-30  8:20   ` [PATCH v3 12/19] block,nvme,scsi,dm: " Christoph Hellwig
2022-10-30  8:20     ` [dm-devel] [PATCH v3 12/19] block, nvme, scsi, dm: " Christoph Hellwig
2022-10-30 23:05     ` [PATCH v3 12/19] block,nvme,scsi,dm: " Mike Christie
2022-10-30 23:05       ` [dm-devel] [PATCH v3 12/19] block, nvme, scsi, dm: " Mike Christie
2022-11-01 10:15       ` [PATCH v3 12/19] block,nvme,scsi,dm: " Christoph Hellwig
2022-11-01 10:15         ` [dm-devel] [PATCH v3 12/19] block, nvme, scsi, dm: " Christoph Hellwig
2022-11-05 18:36         ` [PATCH v3 12/19] block,nvme,scsi,dm: " Mike Christie
2022-11-05 18:36           ` [dm-devel] [PATCH v3 12/19] block, nvme, scsi, dm: " Mike Christie
2022-11-07  9:16           ` [PATCH v3 12/19] block,nvme,scsi,dm: " Christoph Hellwig
2022-11-07  9:16             ` [dm-devel] [PATCH v3 12/19] block, nvme, scsi, dm: " Christoph Hellwig
2022-10-26 23:19 ` [PATCH v3 13/19] nvme: Have NVMe pr_ops return a blk_status_t Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 14/19] scsi: Export scsi_result_to_blk_status Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 15/19] scsi: Have sd pr_ops return a blk_status_t Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 16/19] scsi: target: Rename sbc_ops to exec_cmd_ops Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 17/19] scsi: target: Allow backends to hook into PR handling Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 18/19] scsi: target: Don't support SCSI-2 RESERVE/RELEASE Mike Christie
2022-10-26 23:19   ` [dm-devel] " Mike Christie
2022-10-26 23:19 ` [PATCH v3 19/19] scsi: target: Add block PR support to iblock Mike Christie
2022-10-26 23:19   ` [dm-devel] " 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=20221026231945.6609-5-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.