OSDN Git Service

aoe: add AoE-target files to debugfs
authorEd Cashin <ecashin@coraid.com>
Wed, 11 Sep 2013 21:25:40 +0000 (14:25 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 11 Sep 2013 22:59:23 +0000 (15:59 -0700)
Signed-off-by: Ed Cashin <ecashin@coraid.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/block/aoe/aoe.h
drivers/block/aoe/aoeblk.c
drivers/block/aoe/aoedev.c

index 025c41d..b1f24c5 100644 (file)
@@ -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);
index cb508b7..d76c5cb 100644 (file)
@@ -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));
index 784c92e..c904767 100644 (file)
@@ -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);