raid5: debug print enable

From: Dan Williams <dan.j.williams@intel.com>


---

 drivers/md/raid5.c |   36 ++++++++++++++++++++++++++++++++++++
 1 files changed, 36 insertions(+), 0 deletions(-)

diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 3808f52..496b9a3 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -54,6 +54,10 @@
 #include <linux/raid/bitmap.h>
 #include <linux/async_tx.h>
 
+static int debug_print_enable;
+#undef pr_debug
+#define pr_debug(x...) ((void)(debug_print_enable && printk(x))) 
+
 /*
  * Stripe cache
  */
@@ -4023,6 +4027,37 @@ raid5_stripecache_size = __ATTR(stripe_cache_size, S_IRUGO | S_IWUSR,
 				raid5_store_stripe_cache_size);
 
 static ssize_t
+raid5_show_debug_print_enable(mddev_t *mddev, char *page)
+{
+	return sprintf(page, "%d\n", debug_print_enable);
+}
+
+static ssize_t
+raid5_store_debug_print_enable(mddev_t *mddev, const char *page, size_t len)
+{
+	raid5_conf_t *conf = mddev_to_conf(mddev);
+	char *end;
+	int new;
+	if (len >= PAGE_SIZE)
+		return -EINVAL;
+
+	new = simple_strtoul(page, &end, 10);
+	if (!*page || (*end && *end != '\n') )
+		return -EINVAL;
+	if (new < 0 || new > 1)
+		return -EINVAL;
+
+	debug_print_enable = new;
+	
+	return len;
+}
+
+static struct md_sysfs_entry
+raid5_debug_print = __ATTR(debug_print_enable, S_IRUGO | S_IWUSR,
+				raid5_show_debug_print_enable,
+				raid5_store_debug_print_enable);
+
+static ssize_t
 stripe_cache_active_show(mddev_t *mddev, char *page)
 {
 	raid5_conf_t *conf = mddev_to_conf(mddev);
@@ -4038,6 +4073,7 @@ raid5_stripecache_active = __ATTR_RO(stripe_cache_active);
 static struct attribute *raid5_attrs[] =  {
 	&raid5_stripecache_size.attr,
 	&raid5_stripecache_active.attr,
+	&raid5_debug_print.attr,
 	NULL,
 };
 static struct attribute_group raid5_attrs_group = {
