Commit d45b446b authored by Mike Christie's avatar Mike Christie Committed by Martin K. Petersen
Browse files

nvme: Don't hardcode the data len for pr commands



Reservation Report support needs to pass in a variable sized buffer, so
this patch has the pr command helpers take a data length argument.

Signed-off-by: default avatarMike Christie <michael.christie@oracle.com>
Link: https://lore.kernel.org/r/20230407200551.12660-9-michael.christie@oracle.com


Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarKeith Busch <kbusch@kernel.org>
Reviewed-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent f2bf2e7e
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -2072,7 +2072,7 @@ static char nvme_pr_type(enum pr_type type)
}

static int nvme_send_ns_head_pr_command(struct block_device *bdev,
		struct nvme_command *c, u8 data[16])
		struct nvme_command *c, u8 *data, unsigned int data_len)
{
	struct nvme_ns_head *head = bdev->bd_disk->private_data;
	int srcu_idx = srcu_read_lock(&head->srcu);
@@ -2081,17 +2081,17 @@ static int nvme_send_ns_head_pr_command(struct block_device *bdev,

	if (ns) {
		c->common.nsid = cpu_to_le32(ns->head->ns_id);
		ret = nvme_submit_sync_cmd(ns->queue, c, data, 16);
		ret = nvme_submit_sync_cmd(ns->queue, c, data, data_len);
	}
	srcu_read_unlock(&head->srcu, srcu_idx);
	return ret;
}
	
static int nvme_send_ns_pr_command(struct nvme_ns *ns, struct nvme_command *c,
		u8 data[16])
		u8 *data, unsigned int data_len)
{
	c->common.nsid = cpu_to_le32(ns->head->ns_id);
	return nvme_submit_sync_cmd(ns->queue, c, data, 16);
	return nvme_submit_sync_cmd(ns->queue, c, data, data_len);
}

static int nvme_sc_to_pr_err(int nvme_sc)
@@ -2131,10 +2131,11 @@ static int nvme_pr_command(struct block_device *bdev, u32 cdw10,

	if (IS_ENABLED(CONFIG_NVME_MULTIPATH) &&
	    bdev->bd_disk->fops == &nvme_ns_head_ops)
		ret = nvme_send_ns_head_pr_command(bdev, &c, data);
		ret = nvme_send_ns_head_pr_command(bdev, &c, data,
						   sizeof(data));
	else
		ret = nvme_send_ns_pr_command(bdev->bd_disk->private_data, &c,
					      data);
					      data, sizeof(data));
	if (ret < 0)
		return ret;