mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 07:23:14 +00:00
nvme: check ns's volatile write cache not present
When the VWC of a namespace does not exist, the BLK_FEAT_WRITE_CACHE flag should not be set when registering the block device, regardless of whether the controller supports VWC. Signed-off-by: Guixin Liu <kanie@linux.alibaba.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Keith Busch <kbusch@kernel.org>
This commit is contained in:
parent
1d81143885
commit
8a825d22a7
@ -43,6 +43,7 @@ struct nvme_ns_info {
|
||||
bool is_ready;
|
||||
bool is_removed;
|
||||
bool is_rotational;
|
||||
bool no_vwc;
|
||||
};
|
||||
|
||||
unsigned int admin_timeout = 60;
|
||||
@ -1617,6 +1618,7 @@ static int nvme_ns_info_from_id_cs_indep(struct nvme_ctrl *ctrl,
|
||||
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;
|
||||
info->no_vwc = id->nsfeat & NVME_NS_VWC_NOT_PRESENT;
|
||||
}
|
||||
kfree(id);
|
||||
return ret;
|
||||
@ -2159,7 +2161,7 @@ static int nvme_update_ns_info_block(struct nvme_ns *ns,
|
||||
ns->head->ids.csi == NVME_CSI_ZNS)
|
||||
nvme_update_zone_info(ns, &lim, &zi);
|
||||
|
||||
if (ns->ctrl->vwc & NVME_CTRL_VWC_PRESENT)
|
||||
if ((ns->ctrl->vwc & NVME_CTRL_VWC_PRESENT) && !info->no_vwc)
|
||||
lim.features |= BLK_FEAT_WRITE_CACHE | BLK_FEAT_FUA;
|
||||
else
|
||||
lim.features &= ~(BLK_FEAT_WRITE_CACHE | BLK_FEAT_FUA);
|
||||
|
@ -564,6 +564,7 @@ enum {
|
||||
NVME_NS_FLBAS_META_EXT = 0x10,
|
||||
NVME_NS_NMIC_SHARED = 1 << 0,
|
||||
NVME_NS_ROTATIONAL = 1 << 4,
|
||||
NVME_NS_VWC_NOT_PRESENT = 1 << 5,
|
||||
NVME_LBAF_RP_BEST = 0,
|
||||
NVME_LBAF_RP_BETTER = 1,
|
||||
NVME_LBAF_RP_GOOD = 2,
|
||||
|
Loading…
Reference in New Issue
Block a user