[PATCH v2 1/2] nvmet: return Invalid Field for invalid NSIDs in Set Features 82h

Nilay Shroff nilay at linux.ibm.com
Sun Sep 20 04:07:08 PDT 2026


On 9/20/26 9:04 AM, Guixin Liu wrote:
> diff --git a/drivers/nvme/target/pr.c b/drivers/nvme/target/pr.c
> index 0948a690a1c0..a36c732883d4 100644
> --- a/drivers/nvme/target/pr.c
> +++ b/drivers/nvme/target/pr.c
> @@ -51,6 +51,8 @@ u16 nvmet_set_feat_resv_notif_mask(struct nvmet_req *req, u32 mask)
>   
>   	if (nsid != U32_MAX) {
>   		status = nvmet_req_find_ns(req);
> +		if (status == (NVME_SC_INVALID_NS | NVME_STATUS_DNR))
> +			return NVME_SC_INVALID_FIELD | NVME_STATUS_DNR;
>   		if (status)
>   			return status;
>   		if (!req->ns->pr.enable)
> -- 

This looks good to me. However, to avoid hand-coding the same error
return code multiple times in the function and to make it a bit more
readable, how about modifying it as follows?

u16 nvmet_get_feat_resv_notif_mask(struct nvmet_req *req)
{
	u16 status;
	u16 err = NVME_SC_INVALID_FIELD | NVME_STATUS_DNR;

	status = nvmet_req_find_ns(req);
	if (status) {
		if (status == (NVME_SC_INVALID_NS | NVME_STATUS_DNR))
			return err;
		return status;
	}

	if (!req->ns->pr.enable)
		return err;

	nvmet_set_result(req, READ_ONCE(req->ns->pr.notify_mask));
	return NVME_SC_SUCCESS;
}

Thanks,
--Nilay




More information about the Linux-nvme mailing list