forked from Minki/linux
nvme: introduce nvme_ctrl_get_by_path()
nvme_ctrl_get_by_path() is analogous to blkdev_get_by_path() except it gets a struct nvme_ctrl from the path to its char dev (/dev/nvme0). It makes use of filp_open() to open the file and uses the private data to obtain a pointer to the struct nvme_ctrl. If the fops of the file do not match, -EINVAL is returned. The purpose of this function is to support NVMe-OF target passthru and is exported under the NVME_TARGET_PASSTHRU namespace. Signed-off-by: Logan Gunthorpe <logang@deltatee.com> Reviewed-by: Keith Busch <kbusch@kernel.org> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Max Gurtovoy <maxg@mellanox.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
17365ae697
commit
f783f444ce
@ -4590,6 +4590,29 @@ void nvme_sync_queues(struct nvme_ctrl *ctrl)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nvme_sync_queues);
|
||||
|
||||
struct nvme_ctrl *nvme_ctrl_get_by_path(const char *path)
|
||||
{
|
||||
struct nvme_ctrl *ctrl;
|
||||
struct file *f;
|
||||
|
||||
f = filp_open(path, O_RDWR, 0);
|
||||
if (IS_ERR(f))
|
||||
return ERR_CAST(f);
|
||||
|
||||
if (f->f_op != &nvme_dev_fops) {
|
||||
ctrl = ERR_PTR(-EINVAL);
|
||||
goto out_close;
|
||||
}
|
||||
|
||||
ctrl = f->private_data;
|
||||
nvme_get_ctrl(ctrl);
|
||||
|
||||
out_close:
|
||||
filp_close(f, NULL);
|
||||
return ctrl;
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(nvme_ctrl_get_by_path, NVME_TARGET_PASSTHRU);
|
||||
|
||||
/*
|
||||
* Check we didn't inadvertently grow the command structure sizes:
|
||||
*/
|
||||
|
@ -793,5 +793,6 @@ static inline void nvme_hwmon_init(struct nvme_ctrl *ctrl) { }
|
||||
u32 nvme_command_effects(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
|
||||
u8 opcode);
|
||||
void nvme_execute_passthru_rq(struct request *rq);
|
||||
struct nvme_ctrl *nvme_ctrl_get_by_path(const char *path);
|
||||
|
||||
#endif /* _NVME_H */
|
||||
|
Loading…
Reference in New Issue
Block a user