[PATCH 11/21] nvme: move setting the write cache flags out of nvme_set_queue_limits

Max Gurtovoy mgurtovoy at nvidia.com
Thu Feb 29 05:11:12 PST 2024



On 28/02/2024 20:12, Christoph Hellwig wrote:
> nvme_set_queue_limits is used on the admin queue and all gendisks
> including hidden ones that don't support block I/O.  The write cache
> setting on the other hand only makes sense for block I/O.  Move the
> blk_queue_write_cache call to nvme_update_ns_info_block instead.
> 
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
>   drivers/nvme/host/core.c | 5 ++---
>   1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 3d839945edd85d..dcb8d0590ed0f3 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -1954,15 +1954,12 @@ static u32 nvme_max_drv_segments(struct nvme_ctrl *ctrl)
>   static void nvme_set_queue_limits(struct nvme_ctrl *ctrl,
>   		struct request_queue *q)
>   {
> -	bool vwc = ctrl->vwc & NVME_CTRL_VWC_PRESENT;
> -
>   	blk_queue_max_hw_sectors(q, ctrl->max_hw_sectors);
>   	blk_queue_max_segments(q, min_t(u32, USHRT_MAX,
>   		min_not_zero(nvme_max_drv_segments(ctrl), ctrl->max_segments)));
>   	blk_queue_max_integrity_segments(q, ctrl->max_integrity_segments);
>   	blk_queue_virt_boundary(q, NVME_CTRL_PAGE_SIZE - 1);
>   	blk_queue_dma_alignment(q, 3);
> -	blk_queue_write_cache(q, vwc, vwc);
>   }
>   
>   static bool nvme_update_disk_info(struct nvme_ns *ns, struct nvme_id_ns *id)
> @@ -2093,6 +2090,7 @@ static int nvme_update_ns_info_generic(struct nvme_ns *ns,
>   static int nvme_update_ns_info_block(struct nvme_ns *ns,
>   		struct nvme_ns_info *info)
>   {
> +	bool vwc = ns->ctrl->vwc & NVME_CTRL_VWC_PRESENT;
>   	struct nvme_id_ns *id;
>   	sector_t capacity;
>   	unsigned lbaf;
> @@ -2154,6 +2152,7 @@ static int nvme_update_ns_info_block(struct nvme_ns *ns,
>   	if ((id->dlfeat & 0x7) == 0x1 && (id->dlfeat & (1 << 3)))
>   		ns->head->features |= NVME_NS_DEAC;
>   	set_disk_ro(ns->disk, nvme_ns_is_readonly(ns, info));
> +	blk_queue_write_cache(ns->disk->queue, vwc, vwc);
>   	set_bit(NVME_NS_READY, &ns->flags);
>   	blk_mq_unfreeze_queue(ns->disk->queue);

Looks good,
Reviewed-by: Max Gurtovoy <mgurtovoy at nvidia.com>

>   



More information about the Linux-nvme mailing list