[PATCHv3 11/11] nvme: add rotational support

Guixin Liu kanie at linux.alibaba.com
Tue Nov 5 23:57:06 PST 2024


在 2024/11/6 01:49, Keith Busch 写道:
> From: Matias Bjørling <matias.bjorling at wdc.com>
>
> Rotational devices, such as hard-drives, can be detected using
> the rotational bit in the namespace independent identify namespace
> data structure. Make the bit visible to the block layer through the
> rotational queue setting.
>
> Note that rotational devices typically can be used to generate random
> entropy, the device is therefore also added as a block device that adds
> entropy.
>
> Signed-off-by: Matias Bjørling <matias.bjorling at wdc.com>
> Reviewed-by: Martin K. Petersen <martin.petersen at oracle.com>
> Signed-off-by: Keith Busch <kbusch at kernel.org>
> ---
>   drivers/nvme/host/core.c | 5 +++++
>   include/linux/nvme.h     | 1 +
>   2 files changed, 6 insertions(+)
>
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 4361fc7e8a225..a47149858be59 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -42,6 +42,7 @@ struct nvme_ns_info {
>   	bool is_readonly;
>   	bool is_ready;
>   	bool is_removed;
> +	bool is_rotational;
>   };
>   
>   unsigned int admin_timeout = 60;
> @@ -1615,6 +1616,7 @@ static int nvme_ns_info_from_id_cs_indep(struct nvme_ctrl *ctrl,
>   		info->is_shared = id->nmic & NVME_NS_NMIC_SHARED;
>   		info->is_readonly = id->nsattr & NVME_NS_ATTR_RO;
>   		info->is_ready = id->nstat & NVME_NSTAT_NRDY;
> +		info->is_rotational = id->nsfeat & NVME_NS_ROTATIONAL;
>   	}
>   	kfree(id);
>   	return ret;
> @@ -2162,6 +2164,9 @@ static int nvme_update_ns_info_block(struct nvme_ns *ns,
>   	else
>   		lim.features &= ~(BLK_FEAT_WRITE_CACHE | BLK_FEAT_FUA);
>   
> +	if (info->is_rotational)
> +		lim.features |= BLK_FEAT_ROTATIONAL | BLK_FEAT_ADD_RANDOM;
> +

May I pose a question, what does BLK_FEAT_ADD_RANDOM do?

I see the scsi call add_disk_randomness() in scsi_end_request() if 
request_queue has

BLK_FEAT_ADD_RANDOM flag, but I dont see any calls in the patchset.

Best Regards,

Guixin Liu

>   	/*
>   	 * Register a metadata profile for PI, or the plain non-integrity NVMe
>   	 * metadata masquerading as Type 0 if supported, otherwise reject block
> diff --git a/include/linux/nvme.h b/include/linux/nvme.h
> index 9bd37ec01c072..5976285192ae4 100644
> --- a/include/linux/nvme.h
> +++ b/include/linux/nvme.h
> @@ -563,6 +563,7 @@ enum {
>   	NVME_NS_FLBAS_LBA_SHIFT	= 1,
>   	NVME_NS_FLBAS_META_EXT	= 0x10,
>   	NVME_NS_NMIC_SHARED	= 1 << 0,
> +	NVME_NS_ROTATIONAL	= 1 << 4,
>   	NVME_LBAF_RP_BEST	= 0,
>   	NVME_LBAF_RP_BETTER	= 1,
>   	NVME_LBAF_RP_GOOD	= 2,



More information about the Linux-nvme mailing list