From: Logan Gunthorpe <logang@deltatee.com> To: linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: Christoph Hellwig <hch@lst.de>, Sagi Grimberg <sagi@grimberg.me>, Keith Busch <kbusch@kernel.org>, Jens Axboe <axboe@fb.com>, Chaitanya Kulkarni <Chaitanya.Kulkarni@wdc.com>, Max Gurtovoy <maxg@mellanox.com>, Stephen Bates <sbates@raithlin.com>, Logan Gunthorpe <logang@deltatee.com> Subject: [PATCH v7 01/14] nvme-core: introduce nvme_ctrl_get_by_path() Date: Thu, 1 Aug 2019 17:45:00 -0600 [thread overview] Message-ID: <20190801234514.7941-2-logang@deltatee.com> (raw) In-Reply-To: <20190801234514.7941-1-logang@deltatee.com> nvme_ctrl_get_by_path() is analagous 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. Signed-off-by: Logan Gunthorpe <logang@deltatee.com> --- drivers/nvme/host/core.c | 24 ++++++++++++++++++++++++ drivers/nvme/host/nvme.h | 2 ++ 2 files changed, 26 insertions(+) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index e6ee6f2a3da6..f72334f34a30 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2817,6 +2817,30 @@ static const struct file_operations nvme_dev_fops = { .compat_ioctl = nvme_dev_ioctl, }; +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_GPL(nvme_ctrl_get_by_path); + static ssize_t nvme_sysfs_reset(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index ecbd90c31d0d..7e827c9e892c 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -484,6 +484,8 @@ int nvme_get_log(struct nvme_ctrl *ctrl, u32 nsid, u8 log_page, u8 lsp, extern const struct attribute_group *nvme_ns_id_attr_groups[]; extern const struct block_device_operations nvme_ns_head_ops; +struct nvme_ctrl *nvme_ctrl_get_by_path(const char *path); + #ifdef CONFIG_NVME_MULTIPATH static inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl) { -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: logang@deltatee.com (Logan Gunthorpe) Subject: [PATCH v7 01/14] nvme-core: introduce nvme_ctrl_get_by_path() Date: Thu, 1 Aug 2019 17:45:00 -0600 [thread overview] Message-ID: <20190801234514.7941-2-logang@deltatee.com> (raw) In-Reply-To: <20190801234514.7941-1-logang@deltatee.com> nvme_ctrl_get_by_path() is analagous 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. Signed-off-by: Logan Gunthorpe <logang at deltatee.com> --- drivers/nvme/host/core.c | 24 ++++++++++++++++++++++++ drivers/nvme/host/nvme.h | 2 ++ 2 files changed, 26 insertions(+) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index e6ee6f2a3da6..f72334f34a30 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2817,6 +2817,30 @@ static const struct file_operations nvme_dev_fops = { .compat_ioctl = nvme_dev_ioctl, }; +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_GPL(nvme_ctrl_get_by_path); + static ssize_t nvme_sysfs_reset(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index ecbd90c31d0d..7e827c9e892c 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -484,6 +484,8 @@ int nvme_get_log(struct nvme_ctrl *ctrl, u32 nsid, u8 log_page, u8 lsp, extern const struct attribute_group *nvme_ns_id_attr_groups[]; extern const struct block_device_operations nvme_ns_head_ops; +struct nvme_ctrl *nvme_ctrl_get_by_path(const char *path); + #ifdef CONFIG_NVME_MULTIPATH static inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl) { -- 2.20.1
next prev parent reply other threads:[~2019-08-01 23:46 UTC|newest] Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-08-01 23:44 [PATCH v7 00/14] nvmet: add target passthru commands support Logan Gunthorpe 2019-08-01 23:44 ` Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe [this message] 2019-08-01 23:45 ` [PATCH v7 01/14] nvme-core: introduce nvme_ctrl_get_by_path() Logan Gunthorpe 2019-08-14 14:20 ` Max Gurtovoy 2019-08-14 14:20 ` Max Gurtovoy 2019-08-15 11:46 ` Max Gurtovoy 2019-08-15 11:46 ` Max Gurtovoy 2019-08-15 15:59 ` Logan Gunthorpe 2019-08-15 15:59 ` Logan Gunthorpe 2019-08-01 23:45 ` [PATCH v7 02/14] nvme-core: export existing ctrl and ns interfaces Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-01 23:45 ` [PATCH v7 03/14] nvmet: add return value to nvmet_add_async_event() Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-14 14:26 ` Max Gurtovoy 2019-08-14 14:26 ` Max Gurtovoy 2019-08-14 16:59 ` Logan Gunthorpe 2019-08-14 16:59 ` Logan Gunthorpe 2019-08-01 23:45 ` [PATCH v7 04/14] nvmet: make nvmet_copy_ns_identifier() non-static Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-14 14:29 ` Max Gurtovoy 2019-08-14 14:29 ` Max Gurtovoy 2019-08-15 7:15 ` Chaitanya Kulkarni 2019-08-15 7:15 ` Chaitanya Kulkarni 2019-08-01 23:45 ` [PATCH v7 05/14] nvmet-passthru: update KConfig with config passthru option Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-14 14:31 ` Max Gurtovoy 2019-08-14 14:31 ` Max Gurtovoy 2019-08-01 23:45 ` [PATCH v7 06/14] nvmet-passthru: add passthru code to process commands Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-01 23:45 ` [PATCH v7 07/14] nvmet-passthru: add enable/disable helpers Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-15 12:20 ` Max Gurtovoy 2019-08-15 12:20 ` Max Gurtovoy 2019-08-15 16:02 ` Logan Gunthorpe 2019-08-15 16:02 ` Logan Gunthorpe 2019-08-01 23:45 ` [PATCH v7 08/14] nvmet-core: allow one host per passthru-ctrl Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-15 12:36 ` Max Gurtovoy 2019-08-15 12:36 ` Max Gurtovoy 2019-08-15 16:06 ` Logan Gunthorpe 2019-08-15 16:06 ` Logan Gunthorpe 2019-08-18 10:33 ` Max Gurtovoy 2019-08-22 0:09 ` Sagi Grimberg 2019-08-22 8:50 ` Max Gurtovoy 2019-08-22 17:41 ` Sagi Grimberg 2019-08-22 19:17 ` Sagi Grimberg 2019-08-22 19:41 ` Logan Gunthorpe 2019-08-01 23:45 ` [PATCH v7 09/14] nvmet-core: don't check the data len for pt-ctrl Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-01 23:45 ` [PATCH v7 10/14] nvmet-tcp: don't check data_len in nvmet_tcp_map_data() Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-01 23:45 ` [PATCH v7 11/14] nvmet-configfs: introduce passthru configfs interface Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-15 12:46 ` Max Gurtovoy 2019-08-15 12:46 ` Max Gurtovoy 2019-08-01 23:45 ` [PATCH v7 12/14] block: don't check blk_rq_is_passthrough() in blk_do_io_stat() Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-01 23:45 ` [PATCH v7 13/14] block: call blk_account_io_start() in blk_execute_rq_nowait() Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe 2019-08-01 23:45 ` [PATCH v7 14/14] nvmet-passthru: support block accounting Logan Gunthorpe 2019-08-01 23:45 ` Logan Gunthorpe
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190801234514.7941-2-logang@deltatee.com \ --to=logang@deltatee.com \ --cc=Chaitanya.Kulkarni@wdc.com \ --cc=axboe@fb.com \ --cc=hch@lst.de \ --cc=kbusch@kernel.org \ --cc=linux-block@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvme@lists.infradead.org \ --cc=maxg@mellanox.com \ --cc=sagi@grimberg.me \ --cc=sbates@raithlin.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.