Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

nvme: factor out a nvme_ns_is_readonly helper

Add a little helper to check if a namespace should be marked read-only
that uses a new is_readonly flag in the nvme_ns_info structure.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Javier González <javier.gonz@samsung.com>
Reviewed-by: Joel Granados <j.granados@samsung.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Kanchan Joshi <joshi.k@samsung.com>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Christoph Hellwig and committed by
Jens Axboe
1e4ea66a 1a893c2b

+10 -5
+10 -5
drivers/nvme/host/core.c
··· 36 36 u32 nsid; 37 37 __le32 anagrpid; 38 38 bool is_shared; 39 + bool is_readonly; 39 40 bool is_ready; 40 41 }; 41 42 ··· 1448 1447 return ret; 1449 1448 info->anagrpid = id->anagrpid; 1450 1449 info->is_shared = id->nmic & NVME_NS_NMIC_SHARED; 1450 + info->is_readonly = id->nsattr & NVME_NS_ATTR_RO; 1451 1451 info->is_ready = true; 1452 1452 if (ctrl->quirks & NVME_QUIRK_BOGUS_NID) { 1453 1453 dev_info(ctrl->device, ··· 1484 1482 if (!ret) { 1485 1483 info->anagrpid = id->anagrpid; 1486 1484 info->is_shared = id->nmic & NVME_NS_NMIC_SHARED; 1485 + info->is_readonly = id->nsattr & NVME_NS_ATTR_RO; 1487 1486 info->is_ready = id->nstat & NVME_NSTAT_NRDY; 1488 1487 } 1489 1488 kfree(id); ··· 1912 1909 ns->ctrl->max_zeroes_sectors); 1913 1910 } 1914 1911 1912 + static bool nvme_ns_is_readonly(struct nvme_ns *ns, struct nvme_ns_info *info) 1913 + { 1914 + return info->is_readonly || test_bit(NVME_NS_FORCE_RO, &ns->flags); 1915 + } 1916 + 1915 1917 static inline bool nvme_first_scan(struct gendisk *disk) 1916 1918 { 1917 1919 /* nvme_alloc_ns() scans the disk prior to adding it */ ··· 1982 1974 } 1983 1975 } 1984 1976 1985 - set_disk_ro(ns->disk, (id->nsattr & NVME_NS_ATTR_RO) || 1986 - test_bit(NVME_NS_FORCE_RO, &ns->flags)); 1977 + set_disk_ro(ns->disk, nvme_ns_is_readonly(ns, info)); 1987 1978 set_bit(NVME_NS_READY, &ns->flags); 1988 1979 blk_mq_unfreeze_queue(ns->disk->queue); 1989 1980 ··· 1995 1988 if (nvme_ns_head_multipath(ns->head)) { 1996 1989 blk_mq_freeze_queue(ns->head->disk->queue); 1997 1990 nvme_update_disk_info(ns->head->disk, ns, id); 1998 - set_disk_ro(ns->head->disk, 1999 - (id->nsattr & NVME_NS_ATTR_RO) || 2000 - test_bit(NVME_NS_FORCE_RO, &ns->flags)); 1991 + set_disk_ro(ns->head->disk, nvme_ns_is_readonly(ns, info)); 2001 1992 nvme_mpath_revalidate_paths(ns); 2002 1993 blk_stack_limits(&ns->head->disk->queue->limits, 2003 1994 &ns->queue->limits, 0);