UBI: Add ro-mode sysfs attribute
authorEzequiel Garcia <ezequiel@vanguardiasur.com.ar>
Thu, 28 Apr 2016 21:13:58 +0000 (18:13 -0300)
committerRichard Weinberger <richard@nod.at>
Tue, 24 May 2016 13:15:26 +0000 (15:15 +0200)
On serious situations, UBI may detect serious device corruption,
and switch to read-only mode to protect the data and allow debugging.
This commit exposes this ro-mode on sysfs, so it can be obtained
by userspace tools.

Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Signed-off-by: Richard Weinberger <richard@nod.at>
Documentation/ABI/stable/sysfs-class-ubi
drivers/mtd/ubi/build.c

index 18d471d9faea9bdec594a5bada594b4062ab66fb..a6b3240146924b5aab835b250a5c0b2c8334d6d3 100644 (file)
@@ -107,6 +107,15 @@ Contact:   Artem Bityutskiy <dedekind@infradead.org>
 Description:
                Number of physical eraseblocks reserved for bad block handling.
 
+What:          /sys/class/ubi/ubiX/ro_mode
+Date:          April 2016
+KernelVersion: 4.7
+Contact:       linux-mtd@lists.infradead.org
+Description:
+               Contains ASCII "1\n" if the read-only flag is set on this
+               device, and "0\n" if it is cleared. UBI devices mark themselves
+               as read-only when they detect an unrecoverable error.
+
 What:          /sys/class/ubi/ubiX/total_eraseblocks
 Date:          July 2006
 KernelVersion: 2.6.22
index 22fd19c0c5d3fa56d0a4b84fa508973d96dcc8ff..7091fca0fb445d95cbcec3024021e216ac05038a 100644 (file)
@@ -149,6 +149,8 @@ static struct device_attribute dev_bgt_enabled =
        __ATTR(bgt_enabled, S_IRUGO, dev_attribute_show, NULL);
 static struct device_attribute dev_mtd_num =
        __ATTR(mtd_num, S_IRUGO, dev_attribute_show, NULL);
+static struct device_attribute dev_ro_mode =
+       __ATTR(ro_mode, S_IRUGO, dev_attribute_show, NULL);
 
 /**
  * ubi_volume_notify - send a volume change notification.
@@ -385,6 +387,8 @@ static ssize_t dev_attribute_show(struct device *dev,
                ret = sprintf(buf, "%d\n", ubi->thread_enabled);
        else if (attr == &dev_mtd_num)
                ret = sprintf(buf, "%d\n", ubi->mtd->index);
+       else if (attr == &dev_ro_mode)
+               ret = sprintf(buf, "%d\n", ubi->ro_mode);
        else
                ret = -EINVAL;
 
@@ -404,6 +408,7 @@ static struct attribute *ubi_dev_attrs[] = {
        &dev_min_io_size.attr,
        &dev_bgt_enabled.attr,
        &dev_mtd_num.attr,
+       &dev_ro_mode.attr,
        NULL
 };
 ATTRIBUTE_GROUPS(ubi_dev);