* [PATCH 0/6] aoe: add debugfs-based export of debug counters
@ 2013-07-23 21:06 Ed Cashin
2013-07-23 21:09 ` [PATCH 1/6] aoe: create and destroy debugfs directory for aoe Ed Cashin
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Ed Cashin @ 2013-07-23 21:06 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, ecashin
This patch series applies to today's linux-next/akpm, commit
0c2f52fa9a7cb139617078568c48026c49927617.
It adds the debugging information that the coraid.com-distributed aoe
driver exports via sysfs, but instead of sysfs, it uses debugfs.
With these patches applied, even without AoE targets on the network,
KEDR reports new possible memory leaks, but these are from callers
outside the aoe driver that have used aoe_devnode to get the name of
the character devices through the aoe_class->devnode callback, and I
believe they're responsible for freeing that memory.
Ed L. Cashin (6):
aoe: create and destroy debugfs directory for aoe
aoe: add AoE-target files to debugfs
aoe: provide file operations for debugfs files
aoe: fill in per-AoE-target information for debugfs file
aoe: update copyright date
aoe: update internal version number to 85
drivers/block/aoe/aoe.h | 4 +-
drivers/block/aoe/aoeblk.c | 101 +++++++++++++++++++++++++++++++++++++++++++-
drivers/block/aoe/aoedev.c | 1 +
3 files changed, 103 insertions(+), 3 deletions(-)
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/6] aoe: create and destroy debugfs directory for aoe
2013-07-23 21:06 [PATCH 0/6] aoe: add debugfs-based export of debug counters Ed Cashin
@ 2013-07-23 21:09 ` Ed Cashin
2013-07-23 21:11 ` [PATCH 2/6] aoe: add AoE-target files to debugfs Ed Cashin
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ed Cashin @ 2013-07-23 21:09 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, ecashin
Signed-off-by: Ed Cashin <ecashin@coraid.com>
---
drivers/block/aoe/aoeblk.c | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/drivers/block/aoe/aoeblk.c b/drivers/block/aoe/aoeblk.c
index 916d9ed..cb508b7 100644
--- a/drivers/block/aoe/aoeblk.c
+++ b/drivers/block/aoe/aoeblk.c
@@ -17,11 +17,13 @@
#include <linux/mutex.h>
#include <linux/export.h>
#include <linux/moduleparam.h>
+#include <linux/debugfs.h>
#include <scsi/sg.h>
#include "aoe.h"
static DEFINE_MUTEX(aoeblk_mutex);
static struct kmem_cache *buf_pool_cache;
+static struct dentry *aoe_debugfs_dir;
/* GPFS needs a larger value than the default. */
static int aoe_maxsectors;
@@ -351,6 +353,8 @@ err:
void
aoeblk_exit(void)
{
+ debugfs_remove_recursive(aoe_debugfs_dir);
+ aoe_debugfs_dir = NULL;
kmem_cache_destroy(buf_pool_cache);
}
@@ -362,7 +366,11 @@ aoeblk_init(void)
0, 0, NULL);
if (buf_pool_cache == NULL)
return -ENOMEM;
-
+ aoe_debugfs_dir = debugfs_create_dir("aoe", NULL);
+ if (IS_ERR_OR_NULL(aoe_debugfs_dir)) {
+ pr_info("aoe: cannot create debugfs directory\n");
+ aoe_debugfs_dir = NULL;
+ }
return 0;
}
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/6] aoe: add AoE-target files to debugfs
2013-07-23 21:06 [PATCH 0/6] aoe: add debugfs-based export of debug counters Ed Cashin
2013-07-23 21:09 ` [PATCH 1/6] aoe: create and destroy debugfs directory for aoe Ed Cashin
@ 2013-07-23 21:11 ` Ed Cashin
2013-07-23 21:13 ` [PATCH 3/6] aoe: provide file operations for debugfs files Ed Cashin
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ed Cashin @ 2013-07-23 21:11 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, ecashin
Signed-off-by: Ed Cashin <ecashin@coraid.com>
---
drivers/block/aoe/aoe.h | 2 ++
drivers/block/aoe/aoeblk.c | 35 +++++++++++++++++++++++++++++++++++
drivers/block/aoe/aoedev.c | 1 +
3 files changed, 38 insertions(+), 0 deletions(-)
diff --git a/drivers/block/aoe/aoe.h b/drivers/block/aoe/aoe.h
index 025c41d..b1f24c5 100644
--- a/drivers/block/aoe/aoe.h
+++ b/drivers/block/aoe/aoe.h
@@ -169,6 +169,7 @@ struct aoedev {
ulong ref;
struct work_struct work;/* disk create work struct */
struct gendisk *gd;
+ struct dentry *debugfs;
struct request_queue *blkq;
struct hd_geometry geo;
sector_t ssize;
@@ -206,6 +207,7 @@ struct ktstate {
int aoeblk_init(void);
void aoeblk_exit(void);
void aoeblk_gdalloc(void *);
+void aoedisk_rm_debugfs(struct aoedev *d);
void aoedisk_rm_sysfs(struct aoedev *d);
int aoechr_init(void);
diff --git a/drivers/block/aoe/aoeblk.c b/drivers/block/aoe/aoeblk.c
index cb508b7..d76c5cb 100644
--- a/drivers/block/aoe/aoeblk.c
+++ b/drivers/block/aoe/aoeblk.c
@@ -132,6 +132,40 @@ static const struct attribute_group attr_group = {
.attrs = aoe_attrs,
};
+static const struct file_operations aoe_debugfs_fops;
+
+static void
+aoedisk_add_debugfs(struct aoedev *d)
+{
+ struct dentry *entry;
+ char *p;
+
+ if (aoe_debugfs_dir == NULL)
+ return;
+ p = strchr(d->gd->disk_name, '/');
+ if (p == NULL)
+ p = d->gd->disk_name;
+ else
+ p++;
+ BUG_ON(*p == '\0');
+ entry = debugfs_create_file(p, 0444, aoe_debugfs_dir, d,
+ &aoe_debugfs_fops);
+ if (IS_ERR_OR_NULL(entry)) {
+ pr_info("aoe: cannot create debugfs file for %s\n",
+ d->gd->disk_name);
+ return;
+ }
+ BUG_ON(d->debugfs);
+ d->debugfs = entry;
+}
+void
+aoedisk_rm_debugfs(struct aoedev *d)
+{
+ BUG_ON(d->debugfs == NULL);
+ debugfs_remove(d->debugfs);
+ d->debugfs = NULL;
+}
+
static int
aoedisk_add_sysfs(struct aoedev *d)
{
@@ -332,6 +366,7 @@ aoeblk_gdalloc(void *vp)
add_disk(gd);
aoedisk_add_sysfs(d);
+ aoedisk_add_debugfs(d);
spin_lock_irqsave(&d->lock, flags);
WARN_ON(!(d->flags & DEVFL_GD_NOW));
diff --git a/drivers/block/aoe/aoedev.c b/drivers/block/aoe/aoedev.c
index 784c92e..c904767 100644
--- a/drivers/block/aoe/aoedev.c
+++ b/drivers/block/aoe/aoedev.c
@@ -278,6 +278,7 @@ freedev(struct aoedev *d)
del_timer_sync(&d->timer);
if (d->gd) {
+ aoedisk_rm_debugfs(d);
aoedisk_rm_sysfs(d);
del_gendisk(d->gd);
put_disk(d->gd);
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/6] aoe: provide file operations for debugfs files
2013-07-23 21:06 [PATCH 0/6] aoe: add debugfs-based export of debug counters Ed Cashin
2013-07-23 21:09 ` [PATCH 1/6] aoe: create and destroy debugfs directory for aoe Ed Cashin
2013-07-23 21:11 ` [PATCH 2/6] aoe: add AoE-target files to debugfs Ed Cashin
@ 2013-07-23 21:13 ` Ed Cashin
2013-07-23 21:15 ` [PATCH 4/6] aoe: fill in per-AoE-target information for debugfs file Ed Cashin
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ed Cashin @ 2013-07-23 21:13 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, ecashin
The place holder in the file contents is filled out in the
following patch.
Signed-off-by: Ed Cashin <ecashin@coraid.com>
---
drivers/block/aoe/aoeblk.c | 25 ++++++++++++++++++++++++-
1 files changed, 24 insertions(+), 1 deletions(-)
diff --git a/drivers/block/aoe/aoeblk.c b/drivers/block/aoe/aoeblk.c
index d76c5cb..0511d38 100644
--- a/drivers/block/aoe/aoeblk.c
+++ b/drivers/block/aoe/aoeblk.c
@@ -110,6 +110,24 @@ static ssize_t aoedisk_show_payload(struct device *dev,
return snprintf(page, PAGE_SIZE, "%lu\n", d->maxbcnt);
}
+static int aoedisk_debugfs_show(struct seq_file *s, void *ignored)
+{
+ struct aoedev *d;
+ unsigned long flags;
+
+ d = s->private;
+ spin_lock_irqsave(&d->lock, flags);
+ seq_printf(s, "%s\n", d->gd->disk_name); /* place holder */
+ spin_unlock_irqrestore(&d->lock, flags);
+
+ return 0;
+}
+
+static int aoe_debugfs_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, aoedisk_debugfs_show, inode->i_private);
+}
+
static DEVICE_ATTR(state, S_IRUGO, aoedisk_show_state, NULL);
static DEVICE_ATTR(mac, S_IRUGO, aoedisk_show_mac, NULL);
static DEVICE_ATTR(netif, S_IRUGO, aoedisk_show_netif, NULL);
@@ -132,7 +150,12 @@ static const struct attribute_group attr_group = {
.attrs = aoe_attrs,
};
-static const struct file_operations aoe_debugfs_fops;
+static const struct file_operations aoe_debugfs_fops = {
+ .open = aoe_debugfs_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
static void
aoedisk_add_debugfs(struct aoedev *d)
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/6] aoe: fill in per-AoE-target information for debugfs file
2013-07-23 21:06 [PATCH 0/6] aoe: add debugfs-based export of debug counters Ed Cashin
` (2 preceding siblings ...)
2013-07-23 21:13 ` [PATCH 3/6] aoe: provide file operations for debugfs files Ed Cashin
@ 2013-07-23 21:15 ` Ed Cashin
2013-07-23 21:17 ` [PATCH 5/6] aoe: update copyright date Ed Cashin
2013-07-23 21:19 ` [PATCH 6/6] aoe: update internal version number to 85 Ed Cashin
5 siblings, 0 replies; 7+ messages in thread
From: Ed Cashin @ 2013-07-23 21:15 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, ecashin
This information is presented in a compact format that has
evolved for easy routine scanning by expert humans, mostly
developers and support technicians helping to troubleshoot
or test AoE-based systems.
Signed-off-by: Ed Cashin <ecashin@coraid.com>
---
drivers/block/aoe/aoeblk.c | 33 ++++++++++++++++++++++++++++++++-
1 files changed, 32 insertions(+), 1 deletions(-)
diff --git a/drivers/block/aoe/aoeblk.c b/drivers/block/aoe/aoeblk.c
index 0511d38..b58cbeb 100644
--- a/drivers/block/aoe/aoeblk.c
+++ b/drivers/block/aoe/aoeblk.c
@@ -113,11 +113,42 @@ static ssize_t aoedisk_show_payload(struct device *dev,
static int aoedisk_debugfs_show(struct seq_file *s, void *ignored)
{
struct aoedev *d;
+ struct aoetgt **t, **te;
+ struct aoeif *ifp, *ife;
unsigned long flags;
+ char c;
d = s->private;
+ seq_printf(s, "rttavg: %d rttdev: %d\n",
+ d->rttavg >> RTTSCALE,
+ d->rttdev >> RTTDSCALE);
+ seq_printf(s, "nskbpool: %d\n", skb_queue_len(&d->skbpool));
+ seq_printf(s, "kicked: %ld\n", d->kicked);
+ seq_printf(s, "maxbcnt: %ld\n", d->maxbcnt);
+ seq_printf(s, "ref: %ld\n", d->ref);
+
spin_lock_irqsave(&d->lock, flags);
- seq_printf(s, "%s\n", d->gd->disk_name); /* place holder */
+ t = d->targets;
+ te = t + d->ntargets;
+ for (; t < te && *t; t++) {
+ c = '\t';
+ seq_printf(s, "falloc: %ld\n", (*t)->falloc);
+ seq_printf(s, "ffree: %p\n",
+ list_empty(&(*t)->ffree) ? NULL : (*t)->ffree.next);
+ seq_printf(s, "%pm:%d:%d:%d\n", (*t)->addr, (*t)->nout,
+ (*t)->maxout, (*t)->nframes);
+ seq_printf(s, "\tssthresh:%d\n", (*t)->ssthresh);
+ seq_printf(s, "\ttaint:%d\n", (*t)->taint);
+ seq_printf(s, "\tr:%d\n", (*t)->rpkts);
+ seq_printf(s, "\tw:%d\n", (*t)->wpkts);
+ ifp = (*t)->ifs;
+ ife = ifp + ARRAY_SIZE((*t)->ifs);
+ for (; ifp->nd && ifp < ife; ifp++) {
+ seq_printf(s, "%c%s", c, ifp->nd->name);
+ c = ',';
+ }
+ seq_puts(s, "\n");
+ }
spin_unlock_irqrestore(&d->lock, flags);
return 0;
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 5/6] aoe: update copyright date
2013-07-23 21:06 [PATCH 0/6] aoe: add debugfs-based export of debug counters Ed Cashin
` (3 preceding siblings ...)
2013-07-23 21:15 ` [PATCH 4/6] aoe: fill in per-AoE-target information for debugfs file Ed Cashin
@ 2013-07-23 21:17 ` Ed Cashin
2013-07-23 21:19 ` [PATCH 6/6] aoe: update internal version number to 85 Ed Cashin
5 siblings, 0 replies; 7+ messages in thread
From: Ed Cashin @ 2013-07-23 21:17 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, ecashin
Signed-off-by: Ed Cashin <ecashin@coraid.com>
---
drivers/block/aoe/aoeblk.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/block/aoe/aoeblk.c b/drivers/block/aoe/aoeblk.c
index b58cbeb..d63dcf0 100644
--- a/drivers/block/aoe/aoeblk.c
+++ b/drivers/block/aoe/aoeblk.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012 Coraid, Inc. See COPYING for GPL terms. */
+/* Copyright (c) 2013 Coraid, Inc. See COPYING for GPL terms. */
/*
* aoeblk.c
* block device routines
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 6/6] aoe: update internal version number to 85
2013-07-23 21:06 [PATCH 0/6] aoe: add debugfs-based export of debug counters Ed Cashin
` (4 preceding siblings ...)
2013-07-23 21:17 ` [PATCH 5/6] aoe: update copyright date Ed Cashin
@ 2013-07-23 21:19 ` Ed Cashin
5 siblings, 0 replies; 7+ messages in thread
From: Ed Cashin @ 2013-07-23 21:19 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, ecashin
Signed-off-by: Ed Cashin <ecashin@coraid.com>
---
drivers/block/aoe/aoe.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/block/aoe/aoe.h b/drivers/block/aoe/aoe.h
index b1f24c5..14a9d19 100644
--- a/drivers/block/aoe/aoe.h
+++ b/drivers/block/aoe/aoe.h
@@ -1,5 +1,5 @@
/* Copyright (c) 2013 Coraid, Inc. See COPYING for GPL terms. */
-#define VERSION "83"
+#define VERSION "85"
#define AOE_MAJOR 152
#define DEVICE_NAME "aoe"
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2013-07-23 21:20 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-23 21:06 [PATCH 0/6] aoe: add debugfs-based export of debug counters Ed Cashin
2013-07-23 21:09 ` [PATCH 1/6] aoe: create and destroy debugfs directory for aoe Ed Cashin
2013-07-23 21:11 ` [PATCH 2/6] aoe: add AoE-target files to debugfs Ed Cashin
2013-07-23 21:13 ` [PATCH 3/6] aoe: provide file operations for debugfs files Ed Cashin
2013-07-23 21:15 ` [PATCH 4/6] aoe: fill in per-AoE-target information for debugfs file Ed Cashin
2013-07-23 21:17 ` [PATCH 5/6] aoe: update copyright date Ed Cashin
2013-07-23 21:19 ` [PATCH 6/6] aoe: update internal version number to 85 Ed Cashin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox