nvme: split nvme_report_zones
Split multipath support out of nvme_report_zones into a separate helper and simplify the non-multipath version as a result. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Keith Busch <kbusch@kernel.org> Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
This commit is contained in:
parent
d8ca66e821
commit
8b4fb0f968
|
@ -2073,6 +2073,17 @@ int nvme_sec_submit(void *data, u16 spsp, u8 secp, void *buffer, size_t len,
|
|||
EXPORT_SYMBOL_GPL(nvme_sec_submit);
|
||||
#endif /* CONFIG_BLK_SED_OPAL */
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_ZONED
|
||||
static int nvme_report_zones(struct gendisk *disk, sector_t sector,
|
||||
unsigned int nr_zones, report_zones_cb cb, void *data)
|
||||
{
|
||||
return nvme_ns_report_zones(disk->private_data, sector, nr_zones, cb,
|
||||
data);
|
||||
}
|
||||
#else
|
||||
#define nvme_report_zones NULL
|
||||
#endif /* CONFIG_BLK_DEV_ZONED */
|
||||
|
||||
static const struct block_device_operations nvme_bdev_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.ioctl = nvme_ioctl,
|
||||
|
|
|
@ -349,6 +349,25 @@ static void nvme_ns_head_release(struct gendisk *disk, fmode_t mode)
|
|||
nvme_put_ns_head(disk->private_data);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_ZONED
|
||||
static int nvme_ns_head_report_zones(struct gendisk *disk, sector_t sector,
|
||||
unsigned int nr_zones, report_zones_cb cb, void *data)
|
||||
{
|
||||
struct nvme_ns_head *head = disk->private_data;
|
||||
struct nvme_ns *ns;
|
||||
int srcu_idx, ret = -EWOULDBLOCK;
|
||||
|
||||
srcu_idx = srcu_read_lock(&head->srcu);
|
||||
ns = nvme_find_path(head);
|
||||
if (ns)
|
||||
ret = nvme_ns_report_zones(ns, sector, nr_zones, cb, data);
|
||||
srcu_read_unlock(&head->srcu, srcu_idx);
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
#define nvme_ns_head_report_zones NULL
|
||||
#endif /* CONFIG_BLK_DEV_ZONED */
|
||||
|
||||
const struct block_device_operations nvme_ns_head_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.submit_bio = nvme_ns_head_submit_bio,
|
||||
|
@ -356,7 +375,7 @@ const struct block_device_operations nvme_ns_head_ops = {
|
|||
.release = nvme_ns_head_release,
|
||||
.ioctl = nvme_ns_head_ioctl,
|
||||
.getgeo = nvme_getgeo,
|
||||
.report_zones = nvme_report_zones,
|
||||
.report_zones = nvme_ns_head_report_zones,
|
||||
.pr_ops = &nvme_pr_ops,
|
||||
};
|
||||
|
||||
|
|
|
@ -810,17 +810,14 @@ static inline void nvme_mpath_start_freeze(struct nvme_subsystem *subsys)
|
|||
#endif /* CONFIG_NVME_MULTIPATH */
|
||||
|
||||
int nvme_revalidate_zones(struct nvme_ns *ns);
|
||||
int nvme_ns_report_zones(struct nvme_ns *ns, sector_t sector,
|
||||
unsigned int nr_zones, report_zones_cb cb, void *data);
|
||||
#ifdef CONFIG_BLK_DEV_ZONED
|
||||
int nvme_update_zone_info(struct nvme_ns *ns, unsigned lbaf);
|
||||
int nvme_report_zones(struct gendisk *disk, sector_t sector,
|
||||
unsigned int nr_zones, report_zones_cb cb, void *data);
|
||||
|
||||
blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns, struct request *req,
|
||||
struct nvme_command *cmnd,
|
||||
enum nvme_zone_mgmt_action action);
|
||||
#else
|
||||
#define nvme_report_zones NULL
|
||||
|
||||
static inline blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns,
|
||||
struct request *req, struct nvme_command *cmnd,
|
||||
enum nvme_zone_mgmt_action action)
|
||||
|
|
|
@ -171,8 +171,8 @@ static int nvme_zone_parse_entry(struct nvme_ns *ns,
|
|||
return cb(&zone, idx, data);
|
||||
}
|
||||
|
||||
static int nvme_ns_report_zones(struct nvme_ns *ns, sector_t sector,
|
||||
unsigned int nr_zones, report_zones_cb cb, void *data)
|
||||
int nvme_ns_report_zones(struct nvme_ns *ns, sector_t sector,
|
||||
unsigned int nr_zones, report_zones_cb cb, void *data)
|
||||
{
|
||||
struct nvme_zone_report *report;
|
||||
struct nvme_command c = { };
|
||||
|
@ -230,22 +230,6 @@ out_free:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int nvme_report_zones(struct gendisk *disk, sector_t sector,
|
||||
unsigned int nr_zones, report_zones_cb cb, void *data)
|
||||
{
|
||||
struct nvme_ns_head *head = NULL;
|
||||
struct nvme_ns *ns;
|
||||
int srcu_idx, ret;
|
||||
|
||||
ns = nvme_get_ns_from_disk(disk, &head, &srcu_idx);
|
||||
if (unlikely(!ns))
|
||||
return -EWOULDBLOCK;
|
||||
ret = nvme_ns_report_zones(ns, sector, nr_zones, cb, data);
|
||||
nvme_put_ns_from_disk(head, srcu_idx);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns, struct request *req,
|
||||
struct nvme_command *c, enum nvme_zone_mgmt_action action)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue