[PATCH 19/24] scsi: sd: add multipath PR support

John Garry john.g.garry at oracle.com
Wed Feb 25 07:36:22 PST 2026


Add sd_mpath_pr_ops, which callbacks which call into disk variant of sd PR
ops.

Signed-off-by: John Garry <john.g.garry at oracle.com>
---
 drivers/scsi/sd.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index b807452a4bdc3..f94a3b696dcab 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -4081,6 +4081,61 @@ static int sd_mpath_ioctl(struct scsi_device *sdp, blk_mode_t mode,
 	return sd_ioctl(bdev, mode, cmd, arg);
 }
 
+static int sd_mpath_pr_register(struct scsi_device *sdp, u64 old_key,
+			u64 new_key, u32 flags)
+{
+	return sd_pr_register_disk(dev_get_drvdata(&sdp->sdev_gendev), old_key,
+			new_key, flags);
+}
+
+static int sd_mpath_pr_reserve(struct scsi_device *sdp, u64 key,
+			enum pr_type type, u32 flags)
+{
+	return sd_pr_reserve_disk(dev_get_drvdata(&sdp->sdev_gendev), key, type,
+			flags);
+}
+
+static int sd_mpath_pr_release(struct scsi_device *sdp, u64 key,
+			enum pr_type type)
+{
+	return sd_pr_release_disk(dev_get_drvdata(&sdp->sdev_gendev), key, type);
+}
+
+static int sd_mpath_pr_preempt(struct scsi_device *sdp, u64 old,
+			u64 new, enum pr_type type, bool abort)
+{
+	return sd_pr_preempt_disk(dev_get_drvdata(&sdp->sdev_gendev), old, new,
+			type, abort);
+}
+
+static int sd_mpath_pr_clear(struct scsi_device *sdp, u64 key)
+{
+	return sd_pr_clear_disk(dev_get_drvdata(&sdp->sdev_gendev), key);
+}
+
+static int sd_mpath_pr_read_keys(struct scsi_device *sdp,
+			struct pr_keys *keys_info)
+{
+	return sd_pr_read_keys_disk(dev_get_drvdata(&sdp->sdev_gendev),
+			keys_info);
+}
+
+static int sd_mpath_pr_read_reservation(struct scsi_device *sdp,
+			struct pr_held_reservation *resv)
+{
+	return sd_pr_read_reservation_disk(dev_get_drvdata(&sdp->sdev_gendev),
+			resv);
+}
+
+static const struct scsi_mpath_pr_ops sd_mpath_pr_ops = {
+	.pr_register	= sd_mpath_pr_register,
+	.pr_reserve	= sd_mpath_pr_reserve,
+	.pr_release	= sd_mpath_pr_release,
+	.pr_preempt	= sd_mpath_pr_preempt,
+	.pr_clear	= sd_mpath_pr_clear,
+	.pr_read_keys	= sd_mpath_pr_read_keys,
+	.pr_read_reservation = sd_mpath_pr_read_reservation,
+};
 #else /* CONFIG_SCSI_MULTIPATH */
 #endif
 /**
@@ -4536,6 +4591,7 @@ static struct scsi_driver sd_template = {
 	.mpath_start_cmd	= sd_mpath_start_command,
 	.mpath_end_cmd		= sd_mpath_end_command,
 	.mpath_ioctl		= sd_mpath_ioctl,
+	.mpath_pr_ops		= &sd_mpath_pr_ops,
 	#endif
 	.done			= sd_done,
 	.eh_action		= sd_eh_action,
-- 
2.43.5




More information about the Linux-nvme mailing list