[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