[PATCH] mtd: export mtd->writebufsize attribute over sysfs

Anatolij Gustschin agust at denx.de
Fri Feb 11 06:46:29 EST 2011


Also allow to change mtd->writebufsize for MTD ram test
device dynamicaly.

Signed-off-by: Anatolij Gustschin <agust at denx.de>
---
 drivers/mtd/mtdcore.c |   52 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index b177e75..282ad41 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -230,12 +230,40 @@ static ssize_t mtd_name_show(struct device *dev,
 }
 static DEVICE_ATTR(name, S_IRUGO, mtd_name_show, NULL);
 
+static ssize_t mtd_writebufsize_show(struct device *dev,
+		struct device_attribute *attr, char *buf)
+{
+	struct mtd_info *mtd = dev_to_mtd(dev);
+
+	return snprintf(buf, PAGE_SIZE, "%lu\n",
+			(unsigned long)mtd->writebufsize);
+}
+
+static ssize_t mtd_writebufsize_store(struct device *dev,
+				struct device_attribute *attr,
+				const char *buf, size_t size)
+{
+	struct mtd_info *mtd = dev_to_mtd(dev);
+	unsigned long value;
+	int ret;
+
+	ret = strict_strtoul(buf, 0, &value);
+	if (ret < 0)
+		return ret;
+
+	mtd->writebufsize = value;
+	return size;
+}
+static DEVICE_ATTR(writebufsize, S_IRUGO, mtd_writebufsize_show,
+		   mtd_writebufsize_store);
+
 static struct attribute *mtd_attrs[] = {
 	&dev_attr_type.attr,
 	&dev_attr_flags.attr,
 	&dev_attr_size.attr,
 	&dev_attr_erasesize.attr,
 	&dev_attr_writesize.attr,
+	&dev_attr_writebufsize.attr,
 	&dev_attr_subpagesize.attr,
 	&dev_attr_oobsize.attr,
 	&dev_attr_numeraseregions.attr,
@@ -258,6 +286,28 @@ static struct device_type mtd_devtype = {
 	.release	= mtd_release,
 };
 
+/*
+ * Make attributes of the mtdram test device writable.
+ * Useful for testing different UBIFS images.
+ */
+static inline void mtd_fixup_attr(struct mtd_info *mtd)
+{
+	struct attribute *attr = mtd_attrs[0];
+	int i = 0;
+
+	if (mtd->type != MTD_RAM)
+		return;
+
+	for (i = 0; mtd_attrs[i]; i++) {
+		attr = mtd_attrs[i];
+		if (!strcmp(attr->name, "writebufsize")) {
+			sysfs_chmod_file(&mtd->dev.kobj, attr,
+					 S_IRUGO | S_IWUSR | S_IWGRP);
+			break;
+		}
+	}
+}
+
 /**
  *	add_mtd_device - register an MTD device
  *	@mtd: pointer to new MTD device info structure
@@ -339,6 +389,8 @@ int add_mtd_device(struct mtd_info *mtd)
 						MTD_DEVT(i) + 1,
 						NULL, "mtd%dro", i);
 
+			mtd_fixup_attr(mtd);
+
 			DEBUG(0, "mtd: Giving out device %d to %s\n",i, mtd->name);
 			/* No need to get a refcount on the module containing
 			   the notifier, since we hold the mtd_table_mutex */
-- 
1.7.4




More information about the linux-mtd mailing list