[PATCH v3 04/10] ubi: Expose mean erase counter for data in sysfs

Rickard Andersson
2024-10-11T13:01:21Z

Expose mean erase counter for data area in sysfs. Data area includes
all blocks except for the fastmap area.

This value can be used in order to estimate life expectancy of the
flash.

Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
Signed-off-by: Rickard Andersson <rickard.andersson@axis.com>
---
drivers/mtd/ubi/build.c | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index a5a2e6e3be38..9cc7bc74f0d2 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -138,6 +138,8 @@ static struct device_attribute dev_max_ec_fastmap =
__ATTR(max_ec_fastmap, S_IRUGO, dev_attribute_show, NULL);
static struct device_attribute dev_mean_ec_fastmap =
__ATTR(mean_ec_fastmap, S_IRUGO, dev_attribute_show, NULL);
+static struct device_attribute dev_mean_ec_data =
+ __ATTR(mean_ec_data, S_IRUGO, dev_attribute_show, NULL);
#endif
static struct device_attribute dev_reserved_for_bad =
__ATTR(reserved_for_bad, S_IRUGO, dev_attribute_show, NULL);
@@ -460,6 +462,8 @@ static ssize_t dev_attribute_show(struct device *dev,
ret = sprintf(buf, "%d\n", ubi_calc_max_ec(ubi, 0, UBI_FM_MAX_START));
else if (attr == &dev_mean_ec_fastmap)
ret = sprintf(buf, "%d\n", ubi_calc_mean_ec(ubi, 0, UBI_FM_MAX_START));
+ else if (attr == &dev_mean_ec_data)
+ ret = sprintf(buf, "%d\n", ubi_calc_mean_ec(ubi, UBI_FM_MAX_START, ubi->peb_count));
#endif
else if (attr == &dev_reserved_for_bad)
ret = sprintf(buf, "%d\n", ubi->beb_rsvd_pebs);
@@ -491,6 +495,7 @@ static struct attribute *ubi_dev_attrs[] = {
#ifdef CONFIG_MTD_UBI_FASTMAP
&dev_max_ec_fastmap.attr,
&dev_mean_ec_fastmap.attr,
+ &dev_mean_ec_data.attr,
#endif
&dev_reserved_for_bad.attr,
&dev_bad_peb_count.attr,