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);
|
EXPORT_SYMBOL_GPL(nvme_sec_submit);
|
||||||
#endif /* CONFIG_BLK_SED_OPAL */
|
#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 = {
|
static const struct block_device_operations nvme_bdev_ops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.ioctl = nvme_ioctl,
|
.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);
|
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 = {
|
const struct block_device_operations nvme_ns_head_ops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.submit_bio = nvme_ns_head_submit_bio,
|
.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,
|
.release = nvme_ns_head_release,
|
||||||
.ioctl = nvme_ns_head_ioctl,
|
.ioctl = nvme_ns_head_ioctl,
|
||||||
.getgeo = nvme_getgeo,
|
.getgeo = nvme_getgeo,
|
||||||
.report_zones = nvme_report_zones,
|
.report_zones = nvme_ns_head_report_zones,
|
||||||
.pr_ops = &nvme_pr_ops,
|
.pr_ops = &nvme_pr_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -810,17 +810,14 @@ static inline void nvme_mpath_start_freeze(struct nvme_subsystem *subsys)
|
||||||
#endif /* CONFIG_NVME_MULTIPATH */
|
#endif /* CONFIG_NVME_MULTIPATH */
|
||||||
|
|
||||||
int nvme_revalidate_zones(struct nvme_ns *ns);
|
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
|
#ifdef CONFIG_BLK_DEV_ZONED
|
||||||
int nvme_update_zone_info(struct nvme_ns *ns, unsigned lbaf);
|
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,
|
blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns, struct request *req,
|
||||||
struct nvme_command *cmnd,
|
struct nvme_command *cmnd,
|
||||||
enum nvme_zone_mgmt_action action);
|
enum nvme_zone_mgmt_action action);
|
||||||
#else
|
#else
|
||||||
#define nvme_report_zones NULL
|
|
||||||
|
|
||||||
static inline blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns,
|
static inline blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns,
|
||||||
struct request *req, struct nvme_command *cmnd,
|
struct request *req, struct nvme_command *cmnd,
|
||||||
enum nvme_zone_mgmt_action action)
|
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);
|
return cb(&zone, idx, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nvme_ns_report_zones(struct nvme_ns *ns, sector_t sector,
|
int nvme_ns_report_zones(struct nvme_ns *ns, sector_t sector,
|
||||||
unsigned int nr_zones, report_zones_cb cb, void *data)
|
unsigned int nr_zones, report_zones_cb cb, void *data)
|
||||||
{
|
{
|
||||||
struct nvme_zone_report *report;
|
struct nvme_zone_report *report;
|
||||||
struct nvme_command c = { };
|
struct nvme_command c = { };
|
||||||
|
@ -230,22 +230,6 @@ out_free:
|
||||||
return ret;
|
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,
|
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)
|
struct nvme_command *c, enum nvme_zone_mgmt_action action)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue