mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 20:54:03 +02:00
nvmet: add namespace-level debugfs directory
Add per-namespace debugfs directory support under the subsystem debugfs directory. Each enabled namespace gets a ns<nsid>/ directory created during nvmet_ns_enable() and removed during nvmet_ns_disable(). This provides the infrastructure for exposing namespace-specific debug information in subsequent patches. Reviewed-by: Daniel Wagner <dwagner@suse.de> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Guixin Liu <kanie@linux.alibaba.com> Signed-off-by: Keith Busch <kbusch@kernel.org>
This commit is contained in:
parent
77c57daf98
commit
8f82aaf16f
|
|
@ -616,6 +616,7 @@ int nvmet_ns_enable(struct nvmet_ns *ns)
|
|||
nvmet_ns_changed(subsys, ns->nsid);
|
||||
ns->enabled = true;
|
||||
xa_set_mark(&subsys->namespaces, ns->nsid, NVMET_NS_ENABLED);
|
||||
nvmet_debugfs_ns_setup(ns);
|
||||
ret = 0;
|
||||
out_unlock:
|
||||
mutex_unlock(&subsys->lock);
|
||||
|
|
@ -642,6 +643,7 @@ void nvmet_ns_disable(struct nvmet_ns *ns)
|
|||
|
||||
ns->enabled = false;
|
||||
xa_clear_mark(&subsys->namespaces, ns->nsid, NVMET_NS_ENABLED);
|
||||
nvmet_debugfs_ns_free(ns);
|
||||
|
||||
list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry)
|
||||
pci_dev_put(radix_tree_delete(&ctrl->p2p_ns_map, ns->nsid));
|
||||
|
|
|
|||
|
|
@ -153,6 +153,27 @@ static int nvmet_ctrl_tls_concat_show(struct seq_file *m, void *p)
|
|||
NVMET_DEBUGFS_ATTR(nvmet_ctrl_tls_concat);
|
||||
#endif
|
||||
|
||||
void nvmet_debugfs_ns_setup(struct nvmet_ns *ns)
|
||||
{
|
||||
char name[16];
|
||||
struct dentry *parent = ns->subsys->debugfs_dir;
|
||||
|
||||
if (!parent)
|
||||
return;
|
||||
snprintf(name, sizeof(name), "ns%u", ns->nsid);
|
||||
ns->debugfs_dir = debugfs_create_dir(name, parent);
|
||||
if (IS_ERR(ns->debugfs_dir)) {
|
||||
ns->debugfs_dir = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void nvmet_debugfs_ns_free(struct nvmet_ns *ns)
|
||||
{
|
||||
debugfs_remove_recursive(ns->debugfs_dir);
|
||||
ns->debugfs_dir = NULL;
|
||||
}
|
||||
|
||||
int nvmet_debugfs_ctrl_setup(struct nvmet_ctrl *ctrl)
|
||||
{
|
||||
char name[32];
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ int nvmet_debugfs_subsys_setup(struct nvmet_subsys *subsys);
|
|||
void nvmet_debugfs_subsys_free(struct nvmet_subsys *subsys);
|
||||
int nvmet_debugfs_ctrl_setup(struct nvmet_ctrl *ctrl);
|
||||
void nvmet_debugfs_ctrl_free(struct nvmet_ctrl *ctrl);
|
||||
void nvmet_debugfs_ns_setup(struct nvmet_ns *ns);
|
||||
void nvmet_debugfs_ns_free(struct nvmet_ns *ns);
|
||||
|
||||
int __init nvmet_init_debugfs(void);
|
||||
void nvmet_exit_debugfs(void);
|
||||
|
|
@ -30,6 +32,9 @@ static inline int nvmet_debugfs_ctrl_setup(struct nvmet_ctrl *ctrl)
|
|||
}
|
||||
static inline void nvmet_debugfs_ctrl_free(struct nvmet_ctrl *ctrl) {}
|
||||
|
||||
static inline void nvmet_debugfs_ns_setup(struct nvmet_ns *ns) {}
|
||||
static inline void nvmet_debugfs_ns_free(struct nvmet_ns *ns) {}
|
||||
|
||||
static inline int __init nvmet_init_debugfs(void)
|
||||
{
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -128,6 +128,9 @@ struct nvmet_ns {
|
|||
u8 csi;
|
||||
struct nvmet_pr pr;
|
||||
struct xarray pr_per_ctrl_refs;
|
||||
#ifdef CONFIG_NVME_TARGET_DEBUGFS
|
||||
struct dentry *debugfs_dir;
|
||||
#endif
|
||||
};
|
||||
|
||||
static inline struct nvmet_ns *to_nvmet_ns(struct config_item *item)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user